Java学习笔记:多态,抽象类,接口

多态

多态概述

同一对象,在不同时刻表现出来的不同形态

多态的前提和体现:

  • 有继承/实现关系 public class Cat extends Animal{}
  • 有方法重写cat类中重写animal类方法
  • 有父类引用指向子类对象Animal a=new Cat()

多态中成员访问特点

Animal a = new Cat();
访问成员变量a.age:编译和访问/输出的是父类中的成员变量
访问成员方法a.eat():编译看父类,访问/输出的是子类的成员方法(成员方法有重写)

多态优劣

AnimalOperator类
public void useAnimal(Animal a){
    a.eat;
    a.watchDoor;//报错
}

Animal类
public void eat(){}

Dog extends Animal类
public void eat(){} 
public void watchDoor{}

main()函数
AnimalOperator a=new AnimalOperator();
Dog g = new Dog();
a.useAnimal(d);//实质上就是写Animal a=new Dog()

优势:提高程序扩展性。定义方法时将父类型作为参数,使用时用具体子类型参与操作
劣势:不能使用子类的特有功能

多态的转型

向上转型:父类引用指向子类对象Animal a = new Cat();
向下转型:父类引用转为子类对象Cat c=(cat)a;//强制转型,之后c可以访问子类的特有功能
内存图解

2021-01-20_152045.jpg

a内存地址先被设置为001,因为Animal和c都是cat类的,所以可以强制转换
之后将002的地址赋给a
此时cc和Animal一个是cat类,一个是dog类,不可以强制转换,会报错

抽象类

一个没有方法体的方法定义为抽象方法
类中如果有抽象方法,该类必须定义为抽象类
抽象类:public abstract class 类名{} eg:public abstract class Animal{}
抽象方法:public abstract 数据类型 类名() eg:public abstract void eat();//方法体不需要内容

抽象类特点

1.抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
2.抽象类不能实例化 ,可以通过子类对象实例化(抽象类多态)

Animal是抽象类,Dog是其子类
Animal a=new Animal();//错
Animal a=new Dog();//对

3.抽象类的子类:要么重写抽象类中所有抽象方法,要么自身是抽象类

抽象类成员特点

有成员变量:可以为变量或常量
有构造方法:但无法实例化,只是用于子类访问父类数据的初始化
有成员方法:包含抽象方法(限定子类必须完成某些动作);非抽象方法(提高代码复用性)

接口

概述

接口就是一种公共规范标准,只要符合规范标准,大家都可以通用
java中的接口更多体现在对行为的抽象

接口的特点

  • 接口用关键字interface修饰 public interface 接口名{}
  • 类实现接口用implements表示public class 类名 implements 接口名{}
  • 接口不能实例化,但可以通过实现类对象实例化(接口多态)
Jump是接口,Dog是类
Jump a=new Jump();//错
Jump a=new Dog();//对
  • 接口的实现类:重写接口中所有抽象方法,或自身是抽象类

接口的成员特点

成员变量:只能是常量public static final int age=5 <=> int age=5
构造方法:没有构造方法,接口主要任务是对行为进行抽象,一个类没有父类默认继承自Object类
成员方法:只能是抽象方法public abstract void eat() <=> void eat()

类和接口的关系

类和类:继承关系,只能单继承,可以多层继承

类和接口:实现关系,可以单实现和多实现,可以在继承1个类的同时实现多个接口
public class InterImpl extends Object implements Inter1,Inter2{}
public class InterImpl implements Inter1,Inter2,Inter3{}

接口和接口:继承关系,可以单继承和多继承
public interface Inter3 implements Inter1,Inter2{}

抽象类和接口区别

  • 成员区别
    抽象类:变量、常量;构造方法;抽象非抽象方法
    接口:常量;抽象方法
  • 设计理念
    抽象类:对类抽象,包括属性和行为
    接口:对行为抽象,主要是行为
    (eg:门的开和关是状态属性,而门报警是一种行为,混搭使用)

你可能感兴趣的:(Java学习笔记:多态,抽象类,接口)