Java基础知识总结(9)

多态:意味着允许不同类的对象对同一消息做出不同的响应


多态大多指的是允许时多态

必要条件:满足继承关系,父类引用指向子类对象


会产生不同的方法,都是一个方法,实例类型不同,不一样方法

2和3被称为向上转型 隐式转型 自动转型——父类引用指向子类实例

我们可以调用自己重写的,可以调用父类的派生方法

不过无法调用自己的特有方法


向下转型:

强制类型转换


子类引用指向分类对象,此处必须进行强转

可以调用子类特有方法


这个类型不能成功执行

必须满足转换条件


instanceof判断是否满足特定类型



返回布尔值

父类含有static方法不允许子类重写

向上转型之后只能调用到父类原有的静态方法


这段代码有问题,但是。。。不符常理


这样就可以了

可以向上转型,指向子类实例

当父类只是知道子类应该包含怎样方法,但无法确切知道这些子类如何实现这些方法就要用抽象类


抽象方法:


不能有方法体,同时子类必须实现


子类不想重写必须定义为抽象类

static final private不能和抽象并存,想想也知道

接口 interface




接口在类中得实现

 接口推荐I大头

通常设置为public或者默认访问权限,默认public

接口中抽象方法可以不写abstract

不想实现必须设置抽象类

接口可以包含常量

默认public static final

接口的常量用接口访问是接口的值

用使用接口的类来访问是 那个类的值


默认方法:

default


可以带方法体

还有静态方法 static


不过无法实例调用静态

我们得用接口名调用静态

jdk1.8后使用 默认 和 静态


子类重写默认方法

默认是public访问权限

但是default关键字在重写方法就没了

调用了接口默认方法





多个接口


用,逗号分开


多接口可能 默认方法相同 出错

可以重写那个相同的方法


如果已经继承父类,默认调用父类的同名方法


接口继承:

接口可以继承,并且可以继承多个父接口


两个父接口同时存在同名默认方法

必须重写


内部类:



内部类信息需要靠外部类访问

内部类隐藏在外部类之内,更好的实现了信息隐藏


分类一下四种


成员内部类:最常见的内部类,也称普通内部类



获取内部类实例对象

1 new 外部类 再new 内部类


2. 外部类对象来new内部类


3.通过外部类获取方法

在外部类通常或设置内部类获取方法


内部类必须借助外部信息

内部类访问修饰符可以任意,但是访问范围受到影响


内部类可以直接使用外部类成员信息

另外内部类和外部类重名,优先内部类

如果要访问外部类

父类.this.属性


外部类使用内部类成员必须使用内部类实例


否则无法直接访问

内部类编译后是  外部类$内部类.class


静态内部类:

static修饰的内部类

静态内部类可以不依赖于外部类对象直接创建

静态内部类智能调用外部类静态方法

不然必须new


访问外部成员必须

new


静态内部类对象实例时,可以不依赖于外部类对象

可以通过外部类.内部类.静态成员的方式,访问内部类的静态成员


外部类和内部类同名,默认访问内部类

访问外部类静态属性则通过 外部类.属性


非静态属性,就要new


方法内部类:

定义在外部类中的内部类,也称局部内部类


只能在方法里使用,

方法内不能定义静态成员,

不能public和privat和protected修饰


方法内部类对象无法直接获取

只有通过调用getHeart方法产生Heart对象


不过无法访问内部的方法,因为是方法里的成员 过了这个方法就没了

所以很少返回对象,而调用里面的方法


不过可以包含final ,abstract


匿名内部类

有时候对某个类实例只用一次,这个类对整个程序而言可有可无

类的定义和创建放到一起完成


内存损耗,系统影响小

不过只能使用一次


推荐只用到一次,类定以后马上用到,给类命名不会导致代码更容易被理解的情况

编译后  类名$1.class    类名$2.class


而且匿名内部类无法添加访问修饰符的

private public abstract static protected无法修饰

无法编写构造方法,因为没名字

不过可以构造代码块


但是这种基本不用的


不能出现静态成员的


可以实现接口 可以继承父类  但是不可兼得




猜你喜欢

转载自blog.csdn.net/jhkj_5154/article/details/79942996