java继承和多态

生活中也有许多继承的例子,如图:

在这里插入图片描述

[](()继承的基本语法

class 子类 extends 父类{

}

注意:

  1. 使用 extends 指定父类.

  2. Java 中一个子类只能继承一个父类 (而C++/Python等语言支持多继承).

  3. 子类会继承父类的所有 public 的字段和方法.

  4. 对于父类的 private 的字段和方法, 子类中是无法访问的.

  5. 子类的实例中, 也包含着父类的实例. 可以使用 super 关键字得到父类实例的引用

[](()继承的好处

当我不使用继承时,代码如下:

class Animal {

public String name;

public Animal(String name) {

this.name = name;

}

public void eat(String food) {

System.out.println(this.name+“正在干饭,并表示”+food+“很不错”);

}

}

// Cat.java

class Cat {

public String name;

public Cat(String name) {

this.name = name;

}

public void eat(String food) {

System.out.println(this.name+“正在干饭,并表示”+food+“很不错”);

}

}

// Bird.java

class Bird {

public String name;

public Bird(String name) {

this.name = name;

}

public void eat(String food) {

System.out.println(this.name+“正在干饭,并表示”+food+“很不错”);

}

public void fly() {

System.out.println(this.name + “正在飞 ︿( ̄︶ ̄)︿”);

}

}

由上面代码可以发现,该代码存在大量的冗余代码,如:Animal类,Cat类,Bird类相比较可以发现该3个类都具备相同的eat方法,而且行为完全是 一样的,都有相同的属性name而且意义相同,这种代码维护性不高(维护性主要是后期需要修改的时候,就需要修改很多的代码,容易出错),所以要从根本上解决这代码的问题,就需要继承,以达到代码重用的效果。

使用继承后的代码:

class Animal {

public String name;

public Animal(String name) {

this.name = name;

}

public void eat(String food) {

System.out.println(this.name+“正在干饭,并表示”+food+“很不错”);

}

}

// Cat.java

class Cat extends Animal{

public Cat(String name) {

// 使用 super 调用父类的构造方法.

super(name);

}

}

// Bird.java

class Bird extends Animal{

public Bird(String name) {

super(name);

}

public void fly() {

System.out.println(this.name + “正在飞 ︿( ̄︶ ̄)︿”);

}

}

[](()多态


[](()什么是多态

多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。

[](()向上转型

通常来说,向上转型表示往父类的方向转

在之前代码的基础上,写一个例子

Bird bird = new Bird(“圆圆”);

Animal bird2 = bird;

// 或者写成下面的方式

Animal bird2 = new Bird(“圆圆”);

此时 bird2 是一个父类 (Animal) 的引用, 指向一个子类 (Bird) 的实例. 这种写法称为 向上转型.

[](()动态绑定

当子类和父类中出现同名方法的时候, 再去调用会对前面的代码稍加修改,如以下代码:

class Animal {

public String name;

public Animal(String name) {

this.name = name;

}

public void eat(String food) {

System.out.println(“我是一只小动物”);

System.out.println(this.name+“正在干饭,并表示”+food+“很不错”);

}

}

// Cat.java

class Cat extends Animal{

public Cat(St 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 ring name) {

super(name);

}

@Override

public void eat(String food) {

System.out.println(“我是一只小猫”);

System.out.println(this.name+“正在干饭,并表示”+food+“很不错”);

}

}

// Bird.java

class Bird extends Animal{

public Bird(String name) {

super(name);

}

@Override

public void eat(String food) {

System.out.println(“我是一只小鸟”);

System.out.println(this.name+“正在干饭,并表示”+food+“很不错”);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值