写点什么

java 继承和多态,Java 开发岗笔试题

用户头像
极客good
关注
发布于: 刚刚

}


由上面代码可以发现,该代码存在大量的冗余代码,如: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() 实际调用了子类的方法.


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

向下转型

**向上转型是子类对象转成父类对象, 向下转型就是父类对象转成子类对象. 相比于向上转型


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


来说, 向下转型没那么常见,但是也有一定的用途.**


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+"很不错");


}

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
java继承和多态,Java开发岗笔试题