多态
多态作为面向对象的三大特征之一,那么我们就来进行详细的说明多态。
多态就是父类的引用类型变量指向了子类的对象或者接口实现的引用指向了实现类的对象。
多态发生的前提:
1.要有继承或者实现关系
2.在继承关系中,子类必须要重写父类的方法或者实现接口的抽象的方法
3.要有父类类性成变量或者接口类型的变量指向了实现类
多态的应用
1.
1.普通类多态(基本不用)
package com.oldboy;
class Father{
public void money(){
System.out.println("我有五个亿");
}
public void meng(){
System.out.println("我要当大圣");
}
}
class Zi extends Father{
public void money(){
System.out.println("我有五十个亿");
}
public void meng(){
System.out.println("我要当玉皇");
}
}
public class Demo2 {
public static void main(String[] args) {
Father f=new Zi();
f.meng();
f.money();
}
}
2.抽象类多态(少数)
package com.oldboy;
class Father{
public void money(){
System.out.println("我有五个亿");
}
public void meng(){
System.out.println("我要当大圣");
}
}
class Zi extends Father{
public void money(){
System.out.println("我有五十个亿");
}
public void meng(){
System.out.println("我要当玉皇");
}
}
public class Demo2 {
public static void main(String[] args) {
Father f=new Zi();
f.meng();
f.money();
}
}
.接口多态(常用)
package com.oldboy;
interface Father{
public abstract void money();
public abstract void meng();
}
class Zi implements Father{
public void money(){
System.out.println("我有五十个亿");
}
public void meng(){
System.out.println("我要当玉皇");
}
}
public class Demo2 {
public static void main(String[] args) {
Father f=new Zi();
f.meng();
f.money();
}
3.4 注意事项
3.4.1 多态情况下,子类与父类存在同名成员变量的情况下,访问的是父类的成员变量
3.4.2 多态情况下,父类与子类存在同名的非静态方法时,访问的是子类的成员函数
3.4.3 多态情况下,子类与父类存在同名的静态方法是,访问的是父类的成员
3.4.4 多态情况下,不能访问子类特有的成员,也就是被private修饰的方法,
多态
package Test7;
public class Son2 extends Fu {
public void meng(){
System.out.println("我是老二,我要当科学家");
}
}
public class Son1 extends Fu {
public void meng(){
System.out.println("我是老大,我要当宇航员");
}
}
public class Test {
public static void main(String[] args) {
Fu fu=new Son1();
fu.meng();
Fu fu1=new Son2();
fu1.meng();
}
}
3.5向上转型与向下转型
3.5.1向上转型:就是把子类转换成父类
格式:
父类名 对象名=new 子类名();
3.5.2向下转型:把父类转换成子类
格式:
子类名 对象名=(子类类名)父类类型的变量
向下转型的三步骤:
1.向上转型(把子类的对象赋值给父类类型的变量)
,先向上转型,把子类变成父类
2.子类对象引用父类对象,(需要完成强制转换把父类类型的变量赋值给子类类型的变量)
3.用子类类型的变量调用子类的特有方法

浙公网安备 33010602011771号