先接着上节的话题 继承
继承名字的遮挡问题:
class A{
int a;
}
class B extends A{
int a;
public void method(int a){
a//
}
}
继承和组合 和语法无关,主要是设计角度
class 遥控器{
void volumnUp();
void volumnDown();
}
class 电视{
遥控器 x;
volumnUp(){x.volumnUp();
}
}
下面进入正题 接口
出现的目的 :体现封装性
分离的契约与实现
区分甲方(提要求)和乙方(工作)
接口认为就是一份合同
语法定义 interface 接口名称{
void volumnUp(); 抽象方法
}
//容器
interface Collection{ interface DataStructyre{}
}
intreface list extends Collection,DataStructyre{
}
1.接口的定义允许多继承。
2.接口无法实例化对象。 可以出现,默认都是被
3.接口中给出的方法列表默认。 final static 修饰
1)public访问限定修饰符的
2)无法使用stati修饰(有特列)
3)是一个抽象方法,直接用分号结尾,不用给方法体。
interface JavaCourse{
void 上课();
void 辅导();
void 留作业();
}
语法:类实现接口的语法,写在定义类的时候。
class 陈老师 implements JavaCourse{
@Override
void 上课 (){...... }
........
}
class 汤老师 Implements JavaCourse{
@Override
void 上课(){......}
......
}
class A extends Parent implements IA,IB,IC{
}
1.final 关键字
1.修饰变量,不可变变量,只有一次赋值的机会。
final int a=10;
a=100; //编译时发生错误
final int a[]=new int[10];
A) a=new int [100]; //编译时发生错误
B) a[0]=100; 正确的
final Person p=new Person();
A) p=null; //编译时发生错误
B)p.name="hello"; 正确的
2.final可以修饰类
表示这个类无法被继承
final class A{}
3.final 可以修饰方法
代表这个方法无法被子类覆写
class A{
final void method(){}
}
2.abstract
1.修饰类 这个类无法被实例化
abstract class A{} 抽象类
new A();//编译错误
2.修饰方法 ,该方法称为抽象方法,只有方法签名,没有方法方法实现
abstract void method();
1.抽象方法一但被实现一次,就不再是抽象方法。
2.AbstractList中只是线性表,把公共代码提出来复用,所以无法实现insert 方法,因为顺序表的方法和链表的不同。
多态(继承和多态都是取自生物学上的术语)
猫和狗都是动物 ,都可以叫,但种类不同,所以叫声也不同。
1.父类的引用可以指向子类的对象
2.引用可以调用的方法有那些,在编译期间,是根据引用类型决定的,不是根据对象的类型决定的。
3.运行期间按,真正执行的是那个方法 ?
普通方法
如果是静态方法?
多态
1.父类型的引用可以指向子类型的对象(向上转型。
2.编译期间,可以调用方法列表,以引用类型为主。
3.运行期间真正执行的普通方法,以实际执行的对象为主。
4.运行期间真正执行的静态方法,以应用类型为主。
总结
多态
1.向上转型和向下转型
向上转型是自然的,不需要强制转换,向下转型是不自然的,需要强制转换。
2.转换的正确性需要开发者自行保证。
3.通过instanceof保证。
4.如果错误,会有运行时异常抛出。