纵有疾风起
人生不言弃

继承与多态

继承与多态

继承

1. 继承概述

多个类中存在相同属性和行为时,
将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
通过extends关键字可以实现类与类的继承。

class 子类名 extends 父类名 {}  

2. Java中继承的特点

  • Java只支持单继承,不支持多继承。
class SubDemo extends Demo{} //ok
class SubDemo extends Demo1,Demo2...//error
  • Java支持多层继承(继承体系)
class A{}
class B extends A{}
class C extends B{}

3. 方法重写

  • 概念
    子类中出现了和父类中一模一样的方法声明。
  • 使用特点
    如果方法名不同,就调用对应的方法
    如果方法名相同,最终使用的是子类自己的
  • 注意事项
    • 父类中私有方法不能被重写
    • 子类重写父类方法时,访问权限不能更低
    • 父类静态方法,子类也必须通过静态方法进行重写。
  • 方法重写和方法重载的区别 ? 方法重载能改变返回值类型吗? Overload 与 Override
    方法重写:
    在子类中,出现和父类中一模一样的方法声明的现象。
    方法重载:
    同一个类中,出现的方法名相同,参数列表不同的现象。

方法重载能改变返回值类型,因为它和返回值类型无关。

4. final关键字

  • 修饰类,类不能被继承
  • 修饰变量,变量就变成了常量,只能被赋值一次
  • 修饰方法,方法不能被重写

多态

1. 多态概述

某一个事物,在不同时刻表现出来的不同状态。
同时猫也是动物的一种,也可以把猫称为动物。

动物 d = new 猫();

2. 多态的分类:

  • a:具体类多态
class Fu { }
class Zi extends Fu { }
Fu f = new Zi();
  • b:抽象类多态
abstract class Fu { }
class Zi extends Fu { }
Fu f = new Zi();
  • c:接口多态
interface Fu { }
class Zi implements Fu { }
Fu f = new Zi();

3. 抽象类 abstract

抽象类和抽象方法必须用abstract关键字修饰

abstract class 类名 {}
public abstract void eat();

抽象类的几个小问题
– A:抽象类有构造方法,不能实例化,那么构造方法有什么用?
用于子类访问父类数据的初始化
– B:一个类如果没有抽象方法,却定义为了抽象类,有什么用?
为了不让创建对象
– C:abstract不能和哪些关键字共存
– final 冲突
– private 冲突
– static 无意义

3. 接口 interface(implement)

  • 接口的特点:

A:接口用关键字interface修饰

interface 接口名 { }

B:类实现接口用implements修饰

class 类名 implements 接口名 { }

C:接口不能实例化

D:接口的实现类

a:是一个抽象类。  
b:是一个具体类,这个类必须重写接口中的所有抽象方法。
  • 接口的成员特点:
A:成员变量
    只能是常量
    默认修饰符:public static final
B:构造方法
    没有构造方法
C:成员方法
    只能是抽象的
    默认修饰符:public abstract

原文链接:https://lookme.blog.csdn.net/article/details/55518321

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

未经允许不得转载:起风网 » 继承与多态
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录