1、多态
1.1、多态的概述
什么是多态:
同一个对象,在不同时刻表现出来的不同形态。
多态的前提:
要有继承或实现关系要有方法的重写要有父类引用指向子类对象。
1.2、多态中的成员方法的特点
成员访问特点
成员变量
编译看父类,运行看父类
成员方法
编译看父类,运行看子类
1.3、多态的好处和弊端
好处: 提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作。
弊端: 不能使用子类的特有成员。
1.4、多态的转型
向上转型……父类引用指向子类对象就是向上转型
向下转型……格式:子类型对象名=(子类型)父类引用;
以下为实例代码:
package com.hg.day10.demo01;
public class Fu {
int num = 10;
public Fu() {
//TODO 自动生成的构造函数
}
public Fu(int num) {
//TODO 自动生成的构造函数
}
public class Zi extends Fu {
int num = 20;
public Zi() {
//this(100); !! this和super只能调用一个 !!
super();
System.out.println(“我是子类的无参构造方法”);
1
2
}
public Zi(int n) {
this.num = n;
System.out.println(“我是子类的有参构造方法”+n);
}
public Zi(int n,String name) {
this(1000);
System.out.println(“我是子类的有参构造方法”+n);
}
public void showNum() {
int num = 30;
System.out.println(num);
System.out.println(this.num);
System.out.println(super.num);
}
public void methodA() {
System.out.println(“122”);
}
public void methodB() {
this.methodA();
System.out.println(“456”);
}
}
③
package com.hg.day10.demo01;
public class demo01Extends {
public static void main (String[] agrs) {
Zi zi = new Zi();
}
}
ackage com.hg.day09.demo05;
public class Fu {
public Fu() {
System.out.println(“父类的无参构造方法”);
}
public Fu(int num){
System.out.println(“父类一个参数的 有参构造方法”);
}
public Fu(int num,String name){
System.out.println(“父类两个参数的 有参构造方法”);
}
public abstract class Animal {
public Animal() {
System.out.println(“抽象父类中的构造方法”);
}
public abstract void eat();
public abstract void foot();
public void normalMethod() {
}
}
②
package com.hg.day10.demo02;
public class Cat extends Animal {
public Cat () {
System.out.println(“子类中的构造方法”);
}
@Override // 重写
public void eat() {
System.out.println(“猫吃鱼”);
}
public void foot() {
}