java——抽象类,接口,final

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.接口和抽象类的区别







版权声明:本文为hm17853100916原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。