类与接口
类与接口的关系: 实现关系 接口在类中允许多实现;多个接口之间用逗号个开
接口是一个特殊类
一个非抽象类是实现了的接口:必须实现接口中的所有方法
一个抽象类实现接口:可以不实现接口中的方法,但是竭诚与它的类就必须实现接口中的方法。
一个接口可以继承多个接口
接口与接口的关系:
接口与接口存在继承关系,一个接口存在多个继承
多态: 一个类对象具有多种表现形态(父类的引用类型变量指向子类的对象)
多态条件:
1.必须存在继承
2.必须要有方法的重写
注意: 子父类存在同名的成员变量 ,默认访问父类中的成员
1. 多态情况下子父类存在同名的非静态方法,访问的是子类的非静态方法
2.多态情况下子父类存在同名的静态方法,访问的是父类的静态方法
3.多态情况下:不能访问子类特有的成员变量
总结: 多态情况下子父类如果存在同一个成员,访问的都是父类,除了同名的非静态方法访问子类(Java编译器的编译原理所致。)
编译看左边,运行不一定看右边
编译看左边:java编译器在编译的时候会检测引用类型中是否含有指定成员,如果没有就会报错。
多态的使用场景:
1.多态可以做形式参数,可以让方法接收更多的返回类型。
2.多态用于返回值类型,可以返回多种数据类型。
注意:
不能用子类去接收返回值(父类),若要用子类接收返回值则要强制转换。
多态的另一种表现形式:
接口的引用类型指向实现类。(多态的另一种表现形式)
实现关系下的多态:
接口(接口不能够创建对象) 变量 = new 接口实现对象
内部类: 一个类中可以定义另外一个类。
内部类的文件名: 外部类名$符号链接内部类名。
内部类分两种:
1.成员内部类:
如何访问成员内部类:
1.在外部类中定义一个方法,然后通过内部类对象,再通过对象进行访问。
2.直接在其他类中直接创建内部对象然后通过对象访问
格式: 外部类.内部类 变量名 = new 外部类().new 内部类();
内部类使用的注意点:
1.如果外部类和内部类存在同名的成员变量,在内部类中java虚拟机默认访问内部类中的成员变量,若要访问外部类就必须用 外部类.this。
2.如果内部类中的成员变量被private修饰了,这个时候就只能方式一来修饰
3.如果内部类中有静态便量static修饰那么这个类也必须是静态的。
好处:
内部类可以直接外部类的所有成员。
一般什么时候使用内部类:
我们在描述一个A对象,发现A对象中有需要有一个对象B很复杂,B对象又要访问A中的数据,这时用内部类来描述B对象就很方便。
2.局部内部类:
在类的方法中定义的类,这样的一个类叫局部内部类。
局部内部类只能通过第一种方式来访问。
注意:
1.局部内部类访问了方法中的局部变量,方法中的局部变量用final来修饰。
匿名内部类:
没有类的类就叫匿名内部类。
好处: 简化书写
匿名内部类只是没有名字,其他的和普通类没有区别。
使用前提:
1.外部类必须有继承或实现关系。