*多态
目的: 解决程序的拓展性问题。
实现多态:
1.继承,子类重写父类的方法
2.父类的引用指向子类的对象。
编译时多态: 在程序编译时,被调用的方法对象属于哪个类即调用哪个类的方法。
运行时多态: 在程序运行时,根据引用在对中找到实际类型的对象,在调用该类的对象方法。
*多态对象转型问题
1.子对象转换为父类对象
Pet dog = new Dog();
2.父对象转换为子对象 [ClassCastException]
Pet pet = new Snake();
if(pet instanceof Dog){ //判断pet对象实际的原型是否为Dog类
Dog dog = (Dog)pet;
dog.band();
}
*接口
什么是接口?
接口即是一种强制遵守的约束(规范),如果不遵守此约束则无法使用此接口。
为什么使用接口?
原因: java的继承只能实现单继承,如果同时实现继承父类 ,然后再继承其他元素基因。
此时也就意味着java的继承是无法实现。
解决方式: 使用java的接口,通过接口的多实现,间接实现java的多继承。
比如:
Son 继承 Father 和 Monther
解决:
public Class Son extends Father(类) implements Monther(接口)
怎么实现和使用接口?
1.定义接口
[访问修饰符] interface 接口名称{
//成员变量
//成员方法
}
2.实现接口
public Class 子类 implements 接口1,接口2,接口3.....{
//重写父接口的方法
}
注意细节:
1.接口的方法必须是 public & abstract(默认)方法
或者 public & static ( jdk1.8后 ) 方法
2.接口没有构造方法,接口不能实例化。
3.接口的成员变量必须是public & static 的常(final)量(默认)
4.接口的方法子类必须实现(重写)
5.接口可以多实现。
*类与类的关系
1.is...a : 继承
例如:Student is a Person
2.has...a: 拥有
例如: Student has a Phone
*内部类
1.内部类对象创建
A.B b = new A().new B();
2.静态内部类
A.B b = new A.B();
3.匿名内部类
接口名称(抽象类) 对象名 = new 接口名(){
//接口方法的覆盖
}
*多态
目的: 解决程序的拓展性问题。
实现多态:
1.继承,子类重写父类的方法
2.父类的引用指向子类的对象。
编译时多态: 在程序编译时,被调用的方法对象属于哪个类即调用哪个类的方法。
运行时多态: 在程序运行时,根据引用在对中找到实际类型的对象,在调用该类的对象方法。
*多态对象转型问题
1.子对象转换为父类对象
Pet dog = new Dog();
2.父对象转换为子对象 [ClassCastException]
Pet pet = new Snake();
if(pet instanceof Dog){ //判断pet对象实际的原型是否为Dog类
Dog dog = (Dog)pet;
dog.band();
}
*接口
什么是接口?
接口即是一种强制遵守的约束(规范),如果不遵守此约束则无法使用此接口。
为什么使用接口?
原因: java的继承只能实现单继承,如果同时实现继承父类 ,然后再继承其他元素基因。
此时也就意味着java的继承是无法实现。
解决方式: 使用java的接口,通过接口的多实现,间接实现java的多继承。
比如:
Son 继承 Father 和 Monther
解决:
public Class Son extends Father(类) implements Monther(接口)
怎么实现和使用接口?
1.定义接口
[访问修饰符] interface 接口名称{
//成员变量
//成员方法
}
2.实现接口
public Class 子类 implements 接口1,接口2,接口3.....{
//重写父接口的方法
}
注意细节:
1.接口的方法必须是 public & abstract(默认)方法
或者 public & static ( jdk1.8后 ) 方法
2.接口没有构造方法,接口不能实例化。
3.接口的成员变量必须是public & static 的常(final)量(默认)
4.接口的方法子类必须实现(重写)
5.接口可以多实现。
*类与类的关系
1.is...a : 继承
例如:Student is a Person
2.has...a: 拥有
例如: Student has a Phone
*内部类
1.内部类对象创建
A.B b = new A().new B();
2.静态内部类
A.B b = new A.B();
3.匿名内部类
接口名称(抽象类) 对象名 = new 接口名(){
//接口方法的覆盖
}