java 多态

多态,按字面理解就是“多种状态”的意思。比如我是人,但我同时也是一名学生,这就是我的多种状态。
在实际运用中,比较简单的一个例子就是子类和父类的互相转型。
在满足向上转型(创建子类类型,赋值给父类类型)时,我们应满足以下条件:

  • 存在继承关系
  • 子类要重写父类的方法
  • 父类指向子类(即 父类 对象名 = new 子类类型)

例如:

class Human {
     
	int age = 20;
	
	public void id() {
     
		System.out.println("人");
	}
	
	public static void breath() {
     
		System.out.println("人呼吸");
	}
	
}
class Man extends Human {
     
	String sex = "male";
	int age = 2;
	
	public void id() {
     
		System.out.println("男人");
	}
	
	public static void breath() {
     
		System.out.println("男人呼吸");
	}
	
	public static void sleep() {
     
		System.out.println("男人睡觉");
	}
}

我们定义了如上两个类,那么接下来我们使用多态来看看效果。

public class Main {
     

	public static void main(String[] args) {
     
		Human h = new Man();
		
		h.id();
		h.breath();
		System.out.println(h.age);
	}

}

最终显示的结果为

20
男人
人呼吸

这里我们的id方法是非静态的,这一方法被Human的子类Man重写了,所以会执行子类方法,但是breath方法执行的是父类的。
同理,age数据域也会输出父类的结果。

当我们向上转型后,子类特有的数据域和方法就失效了。例如我们现在要访问子类的sex数据域或者调用sleep方法,编译器会出现未定义的错误。

这时我们可以再进行向下转型,将父类强制类型转换成子类,就能得到想要的结果。

public class Main {
     

	public static void main(String[] args) {
     
		Human h = new Man();
		
		Man m = (Man)h;
		m.breath();
		m.sleep();
		System.out.println(m.age);
		System.out.println(m.sex);
	}

}
男人呼吸
男人睡觉
2
male

你可能感兴趣的:(Java,作业)