Java中的抽象类和多态的区别,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可以访问子类的特有功能

内存图解

2c59d795f775

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:门的开和关是状态属性,而门报警是一种行为,混搭使用)

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值