1.接口:
1)是一种数据类型(引用类型)
2)由interface定义的
3)接口中只能包含常量和抽象方法
4)接口不能被实例化
5)接口是需要被实现/继承的,实现类/派生类:
必须重写接口中的所有抽象方法
6)一个类可以实现多个接口,用逗号分隔
若又继承又实现时,应先继承后实现
2.多态:
1)多态的意义:
1.1)同一类型的引用指向不同的对象时,具体的实现不同的
1.2)同一个对象被造型为不同的类型时,所具备的功能是不同的
2)向上造型:
2.1)超类型的引用指向派生类的对象
2.2)能造型成为的类型有: 超类+所实现的接口
2.3)能点出来什么,看引用的类型
3)强制类型转换,成功的条件只有如下两种:
3.1)引用所指向的对象,就是该类型
3.2)引用所指向的对象,实现了该接口
4)强转时若不符合如上条件则发生ClassCastException类型转换异常
1)是一种数据类型(引用类型)
2)由interface定义的
3)接口中只能包含常量和抽象方法
4)接口不能被实例化
5)接口是需要被实现/继承的,实现类/派生类:
必须重写接口中的所有抽象方法
6)一个类可以实现多个接口,用逗号分隔
若又继承又实现时,应先继承后实现
7)接口可以继承接口
类和类---------------继承extends
接口和接口-----------继承extends
类和接口-------------实现implements
Inter2 o1 = new Inter2(); //编译错误,接口不能被实例化
Inter2 o2 = new Aoo(); //向上造型
Inter1 o3 = new Aoo(); //向上造型
interface Inter1{
void show();
}
interface Inter2 extends Inter1{
void say();
}
class Aoo implements Inter2{
public void say(){}
public void show(){}
}
2.多态:
1)多态的意义:
1.1)同一类型的引用指向不同的对象时,具体的实现不同的
---------行为的多态:cut(),run(),step()...
人 p1 = new 理发师();
人 p2 = new 外科医师();
人 p3 = new 演员();
p1.cut(); //剪发
p2.cut(); //开刀
p3.cut(); //停止表演
abstract class 人{
abstract void cut();
}
class 理发师 extends 人{
void cut(){ 剪发 }
}
class 外科医师 extends 人{
void cut(){ 开刀 }
}
class 演员 extends 人{
void cut(){ 停止表演 }
}
1.2)同一个对象被造型为不同的类型时,所具备的功能是不同的
---------对象的多态:我、水...
我 me = new 我();
讲师 o1 = me;
孩子他妈 o2 = me;
老公的老婆 o3 = me;
o1.授课();
o2.揍他();
o3.咬他();
o3.收工资();
me.授课();
me.揍他();
me.咬他();
me.收工资();
interface 讲师{
void 授课();
}
interface 孩子他妈{
void 揍他();
}
interface 老公的老婆{
void 咬他();
void 收工资();
}
class 我 implements 讲师,孩子他妈,老公的老婆{
public void 授课(){}
public void 揍他(){}
public void 咬他(){}
public void 收工资(){}
}
2)向上造型:
2.1)超类型的引用指向派生类的对象
2.2)能造型成为的类型有: 超类+所实现的接口
2.3)能点出来什么,看引用的类型
3)强制类型转换,成功的条件只有如下两种:
3.1)引用所指向的对象,就是该类型
3.2)引用所指向的对象,实现了该接口
4)强转时若不符合如上条件则发生ClassCastException类型转换异常
建议:在强转之前先通过instanceof来判断引用指向的对象是否是该类型
Aoo o1 = new Boo();
Boo o2 = (Boo)o1; //符合条件1
Inter1 o3 = (Inter1)o1; //符合条件2
Coo o4 = (Coo)o1; //类型转换异常
if(o1 instanceof Coo){
Coo o5 = (Coo)o1;
}
System.out.println(o1 instanceof Boo); //true
System.out.println(o1 instanceof Inter1); //true
System.out.println(o1 instanceof Coo); //false
interface Inter1{
}
class Aoo{
}
class Boo extends Aoo implements Inter1{
}
class Coo extends Aoo{
}