面向对象-多态-抽象类-接口(2020-01-08)

多态简介

多态就是事物存在的多种形态,比如你在大街上看见一只藏熬,你可以说这只藏獒真凶猛,也可以说这只狗真凶猛,还可以说这个动物真凶猛,以上三种说法其实都是指的这只藏獒。

在Java里面,也是存在多态的,只要全部符合下面这三种情况,就是多态

■有继承

■有方法重写

■有父类引用指向子类对象

Cat c1=new Cat();

Animal al=new Cat();//父类引用指向子类对象,自动类型转换,也叫做向上转型

al.eat();//动态绑定的静态绑定

成员变量不存在重写

Cat c2=(Cat)al;//强制转换类型,也叫做向下转型

多态的有点

//多态的优点:提高代码的扩展性。

//开发当中注意:要面向抽象编程,不要面向具体编程

public void drive(Benz bc){//用具体的话就会显得代码臃肿,用完就要改

bc.run();

}

public void drive(Car c){//用抽象编程可以防止代码臃肿

c.run();

}


final修饰的类无法被继承。

final修饰的方法无法被重写。

final修饰的局部变量,-一旦赋值,不可再改变。

final修饰的成员变量必须初始化值。

final修饰的基本数据类型,值不能改变

final修饰的引用数据类型,指向地址是不能改变的,但是对象里面的值是可以改变的

抽象的概念


抽象这个词说白了就是看不懂,毕加索的画一般都是被称为抽象的。在java里面可以使用关键字abstract修饰-一个类,这样的类被称为抽象类, abstract修饰的方法叫做抽象方法。抽象类或抽象方法一般也是看不懂的,因为里面可能根本就没有代码。


抽象类的特点


■抽象类无法被实例化,无法创建抽象类的对象。

■虽然抽象类没有办法实例化,但是抽象类也有构造方法,该构造方法是给子类创建对象用的。这也算是多态的一种。

■抽象类中不一-定有抽象方法,但抽象方法必须出现在抽象类中。

■抽象类中的子类可以是抽象类,如果不是抽象类的话必须对抽象类中的抽象方法进行重写。

■抽象类和抽象方法不能被final修饰 

示例

public abstract A{   //abstract是抽象类

System.out.println("class A");

}

//抽象方法

public abstract void ml();

public static void main(String[] dawd){

//A a =new A();//抽象类不能被实例化

A a=new B();

a.m1();

        }

}

class B extends A{

public void m1(){

System.out.println(class B中的m1方法);

}

public B(){

super();

System.out.println("class B");

}

}

接口

接口的概述

电脑上面的主板有很多接口,比如内存条的接口,有了这个接口,可以插入多个内存条,主板和内存条可能不是同一家生产厂商,但是两种物体却能结合到一起,正是因为这个接口的存在。只要厂家遵循这个接口,主板和内存条就可以随意更换,提高了可插拔性,接口其实也是体现着一种规范 。

在java语言里面使用interface来声明- -个接口,接口其实是- -个特殊的抽象类,在接口里面的方法全部都是抽象的。

关于接口,有几个需要注意的地方:

■接口中只能出现常量和抽象方法

■接口里面没有构造方法,无法创建接口的对象

■接口和接口之间支持多继承,即- -个接口可以有多个父接口

■一个类可以实现多个接口,即-一个类可以有多个父接口

■一个类如果实现了接口,那么这个类需要重写接口中所有的抽象方法(建议) ,如果不重写则这个类需要声明为抽象类(不建议) 


接口的作用

●可以使项目分层,都面向接口开发,提高开发效率

■降低了代码之间的耦合度,提高了代码的可插拔性

开发中尽量使用接口,少用抽象类,-个类可以实现多个接口,却只能继承-一个父类将之前的james开汽车的例子修改-下

将Car定义为接口

interface Car{

    public void run();

}

你可能感兴趣的:(面向对象-多态-抽象类-接口(2020-01-08))