0
点赞
收藏
分享

微信扫一扫

Java学习笔记4——多态

木匠0819 2022-03-11 阅读 90

java学习笔记4——多态

  1. java引用类型有两个类型:编译类型运行类型;编译类型由声明该变量时的类型决定,运行类型由实际赋给该变量的对象决定。
  2. 向上转型:父类可以指向子类
Base base=new Sub();//父类指向子类对象,Base是编译类型,Sub是运行类型
  1. 向下转型:编译类型为父类可以向下转型为运行子类
Sub sub=(Sub)base;//base向下转型,强制类型转化,编译类型由Base转为Sub
  1. 多态下,成员变量从编译类型开始访问
System.out.println(base.a);//输出10;
System.out.println(((Sub)base).a);//输出9;
  1. 多态下,成员方法若被重写,调用被重写的方法,且不在编译类型下的方法无法调用
base.function1();//调用了Sub的重写方法
        
((Sub) base).sub_function();//加强制类型转换,否则无法调用子类的特有方法

6.本质类型是运行类型

System.out.println(base.getClass());//输出都是com.test.Sub
System.out.println(((Sub)base).getClass());

全部测试代码如下:

package com.test;

public class Test03 {
    public static void main(String[] args) {
        Base base=new Sub();//父类指向子类对象,Base是编译类型,Sub是运行类型
        
        System.out.println(base.a);//输出10;
        System.out.println(((Sub)base).a);//输出9;
        
        base.function1();//调用了Sub的重写方法
        
        ((Sub) base).sub_function();//加强制类型转换,否则无法调用子类的特有方法
        
        System.out.println(base.getClass());//输出都是com.test.Sub
        System.out.println(((Sub)base).getClass());
    }
}

class Base{//父类Base
    public int a=10;//子类a初始化10
    public static void f1(){
        System.out.println("nihao");
    }
    public void function1(){
        System.out.println("Base的function1调用");//父类的function1
    }
}
class Sub extends Base{
    public int a=9;//子类a初始化9
    @Override
    public void function1() {
        System.out.println("Sub的function1调用");//子类的function1
    }
    public void sub_function(){}//子类特有方法

}
举报

相关推荐

0 条评论