1.抽象类:当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法【抽象方法】,用abstract来修饰该类【抽象类】 Demo5
2. 当一个子类继承的父类是抽象类的话,需要我们在子类中把抽象类中所有的抽象方法全部实现
3.抽象类的注意:
(1)抽象类不能实例化,就是不能实例创建对象
(2)抽象类不一定包含抽象方法
(3)一旦某个类包含了抽象方法,该类必须声明为abstract,抽象类
(4)抽象方法不能有主体
(5)抽象类可以没有抽象方法,但是可以有实现了的方法
4.接口:(是更加抽象的抽象类),体现了程序设计的多态和高内聚低耦合的思想
(1)接口不能实例化
(2)接口中中的所有方法都不能有主体(区别抽象类)
(3)一个类可以实现多个接口 两个接口逗号分隔
(4)接口中可以有变量【但变量不能用private,protected修饰】
a.接口中的变量,本质上都是static的,而且是final,不管你加不加static修饰
b.在java开发汇总,我们经常把常用的变量,定义在接口中,作为全局变量使用。访问形式:接口名.变量名
(5)一个接口不能继承其他的类,但是可以继承别的接口
5.实现接口可以看作是对继承的一种补充,实现接口可在不打破继承关系的前提下,对某个类功能扩展,非常灵活
6.用接口实现多态 ------------Demo7
//汽车出售店
public class Demo7 {
//售车收入
private int money=0;
//卖出一部车
public void sellCar(Car car){
System.out.println("车型"+car.getName()+"单价:"+car.getPrice());
//增加卖出汽车售价的收入
money+=car.getPrice();
}
//s=售车总收入
public int getMoney(){
return money;
}
public static void main(String args[]){
Demo7 ashop=new Demo7();
//卖出一辆宝马
ashop.sellCar(new BMW());
//卖出一辆奇瑞QQ
ashop.sellCar(new CherQQ());
System.out.println("总收入是:"+ashop.getMoney());
}
}
//汽车接口
interface Car{
//汽车名称
String getName();
//获得汽车售价
int getPrice();
}
//宝马
class BMW implements Car{
public String getName() {
return "BWM";
}
public int getPrice() {
return 300000;
}
}
//奇瑞QQ
class CherQQ implements Car{
@Override
public String getName() {
return "CherQQ";
}
@Override
public int getPrice() {
return 20000;
}
}7.关于多态,继承的总结(Demo7)
继承是多态得以实现的基础。从字面上理解,多态就是一种类型(都是Car类型)表现出的多种状态(宝马汽车的名称呢个,售价;奇瑞汽车名称,售价)。将一个方法调用同这个方法所属的主体(也就是对象或类)关联起来叫做绑定,分前期绑定和后期绑定两种。
(1 )前期绑定:在程序运行之前进行绑定,由编译器和连接程序实现,又叫做静态绑定。比如static方法和final方法,注意,这里也包括private方法,因为他是隐式final的。
(2)后期绑定:在运行时根据对象的类型进行绑定,由方法调用机制实现,因此又叫做动态绑定,或者运行时绑定。除了前期绑定外的所有方法都属于后期绑定。【】
public void sellCar(Car car){
System.out.println("车型"+car.getName()+"单价:"+car.getPrice());
//增加卖出汽车售价的收入
money+=car.getPrice();
}
//s=售车总收入
public int getMoney(){
return money;
}
public static void main(String args[]){
Demo7 ashop=new Demo7();
//卖出一辆宝马
ashop.sellCar(new BMW());
//卖出一辆奇瑞QQ
ashop.sellCar(new CherQQ());
System.out.println("总收入是:"+ashop.getMoney());
}比如说sellCar方法中的参数是一个Car对象,一开始在编译之前并不知道它的类型,在编译的时候才会知道是宝马还是奇瑞
8.多态就是在后期绑定这种机制上实现的。好处是消除了类之间的耦合关系,使程序更容易扩展。
9.final:可以修饰变量或者方法-------案例Demo8
用到的情况:
(1)当不希望父类的某个方法被子类覆盖(override)时,可以用final关键字修饰
(2)当不希望类的某个变量的值被修改,可以用final修饰,如果一个变量是final,则必须初始化,赋初值,否则无法编译。
(3) 当不希望被继承时,可以用final修饰
10.final注意事项
(1)final修饰的变量又叫常量,一般用xx_xx_xx来命名
(2)final修饰的变量在定义时,必须赋初值,并且以后不能再赋值
11.final—什么时候用
(1)因为安全的考虑,类的某个方法不能修改
(2)类不能被其他的类继承
(3)某些变量值是固定不变的,比如圆周率等
12.多态存在的三个前提(https://www.zhihu.com/question/30082151/answer/120520568)
(1)要有继承的关系
(2)子类要重写父类的方法
(3)父类引用指向子类队
13.多态成员访问的特点
弊端:不能访问子类特有的成员属性和方法
14.接口和抽象类的区别