标签:lazy 电话 tag 有关 成员访问 传递 term demo com
概念
方法重写的应用场景
代码示例
package com.wrg; public class Test { public static void main(String[] args) { // 创建子类对象 NewPhone np = new NewPhone(); // 调用父类继承而来的方法 np.call("张三"); // 调用子类重写的方法 np.showNum(); } } //父类 class Phone { //父类的方法 public void sendMessage() { System.out.println("发短信"); } public void call(String name) { System.out.println("给" + name + "打电话"); } public void showNum() { System.out.println("来电显示号码"); } } //智能手机类,子类 class NewPhone extends Phone { //重写父类的来电显示号码功能,并增加自己的显示姓名和图片功能 public void showNum() { //调用父类已经存在的功能使用super关键字 super.showNum(); //增加自己特有显示姓名和图片功能 System.out.println("显示来电姓名"); System.out.println("显示头像"); } }
什么是多态?
前提
在 java 中允许这样的两种语法出现,一种是向上转型(Upcasting),一种是向下转型(Downcasting),向上转型是指子类型转换为父类型,又被称为自动类型转换,向下转型是指父类型转换为子类型,又被称为强制类型转换。请看下图:
向上转型
使用格式:
向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制类型转换的格式,便是向下转型。
使用格式:
多态的好处
多态的弊端
如何解决多态的弊端
注意:
多态中的成员访问特点
总结:
为什么成员方法和成员变量不同?
代码举例
//定义父类 public class Animal { public int age = 40; public void eat() { System.out.println("动物吃东西"); } }
定义子类
public class Cat extends Animal { public int age = 20; public int weight = 10; @Override public void eat() { System.out.println("猫吃鱼"); } public void playGame() { System.out.println("猫捉迷藏"); } }
定义测试类
public class AnimalDemo { public static void main(String[] args) { //有父类引用指向子类对象 Animal a = new Cat(); // 当使用多态方式调用成员变量时,首先检查父类中是否有该变量,如果没有,则编译错误;如果有,执行的是父类中的变量 System.out.println(a.age);//40 //当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写后方法 a.eat();//猫吃鱼 } }
public class AnimalDemo { public static void main(String[] args) { // 向上转型 Animal a = new Cat(); a.eat(); // 调用的是 Cat 的 eat // 向下转型 if (a instanceof Cat) { Cat c = (Cat) a; c.catchMouse(); // 调用的是 Cat 的 catchMouse } else if (a instanceof Dog) { Dog d = (Dog) a; d.watchHouse(); // 调用的是 Dog 的 watchHouse } } }
总结一下类型转换
标签:lazy 电话 tag 有关 成员访问 传递 term demo com
原文地址:https://www.cnblogs.com/wurengen/p/13256525.html