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(String 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+“很不错”);

}

public void fly() {

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

}

}

public class Main{

public static void main(String[] args){

Animal animal1 = new Animal(“圆圆”);

animal1.eat(“谷子”);

System.out.println(“====================”);

Animal animal2 = new Bird(“扁扁”);

animal2.eat(“谷子”);

}

}

我们发现:

animal1 和 animal2 虽然都是 Animal 类型的引用, 但是 animal1 指向 Animal 类型的实例, animal2 指向Bird 类型的实例.

针对 animal1 和 animal2 分别调用 eat 方法, 发现 animal1.eat() 实际调用了父类的方法, 而animal2.eat() 实际调用

必看视频!获取2024年最新Java开发全套学习资料 备注Java

了子类的方法.

因此, 在 Java 中, 调用某个类的方法, 究竟执行了哪段代码 (是父类方法的代码还是子类方法的代码) , 要看究竟这个引用指向的是父类对象还是子类对象. 这个过程是程序运行时决定的(而不是编译期), 因此称为动态绑定

向下转型

向上转型是子类对象转成父类对象, 向下转型就是父类对象转成子类对象. 相比于向上转型来说, 向下转型没那么常见,但是也有一定的用途.

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(String 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+“很不错”);

}

public void fly() {

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

}

最后

给大家送一个小福利

附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。

public void eat(String food) {

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

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

}

public void fly() {

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

}

最后

给大家送一个小福利

[外链图片转存中…(img-5cLEZVoz-1716465318189)]

附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。

[外链图片转存中…(img-O0SR8GVa-1716465318190)]

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java继承多态Java面向对象编程中的重要概念。继承是指子类可以继承父类的属性和方法。在Java中,通过使用关键字"extends"来实现类的继承。例如,可以定义一个父类和一个子类,子类通过extends关键字继承父类的属性和方法。 多态Java中的另一个重要概念,它是指同一个方法可以根据调用对象的不同而表现出不同的行为。方法的重写和重载是多态性的不同表现。重写是指子类实现了和父类相同名称、相同参数列表和相同返回类型的方法,但是具体的实现可能不同。重载是指在同一个类中可以定义多个同名方法,但是参数列表不同。 通过继承多态Java中的类可以实现代码的重用、灵活性和扩展性。子类可以继承父类的属性和方法,并且可以根据需要进行方法的重写和重载,从而实现不同的行为。这样可以提高代码的可维护性和可扩展性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java学习资料-Java继承多态](https://download.csdn.net/download/weixin_43516258/87905486)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [十三、 封装、继承多态](https://blog.csdn.net/CaesarQu/article/details/117373505)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值