多态简介
多态就是事物存在的多种形态,比如你在大街上看见一只藏熬,你可以说这只藏獒真凶猛,也可以说这只狗真凶猛,还可以说这个动物真凶猛,以上三种说法其实都是指的这只藏獒。
在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();
}