package com.test;
/**
* @author anyan
* @description
* @date 2021/9/19 10:25
*/
/*关于对象的上转型对象
*
* */
public class Test02 {
public static void main(String[] args) {
Parent parent=new Parent();
Son son=new Son();
Parent parent1=new Son();//子类对象的上转型对象
/*对比子类对象和子类对象的上转型对象可以调用的内容*/
/*子类可以直接调用
1.子类自己新增的成员变量和方法
2.从父类中继承过来的并且未对其做任何修改的成员变量和方法
子类不可以直接调用(必须通过关键字super才能调用)
1.子类从父类继承过来的并且对其进行了修改的成员变量和方法
2.父类的构造方法(子类无法继承父类中的构造方法,只能再子类的构造方法首条语句加入super()方法来访问)
子类的上转型对象可以调用:
1.父类中的成员变量(包括继承的和被隐藏的成员变量)
2.继承的方法和被子类重写的方法
子类的上转型对象不可以调用:
1.子类新增的成员(包括新增的成员变量和方法)
2.父类总被隐藏的方法
* */
System.out.println(son.name);//son
System.out.println(son.name01);//anyan
son.mth();//parent
son.mth01();//重写
son.mth02();//子类新增;parent ; parent被隐藏的方法
System.out.println("子类的上转型对象-----------------------------");
System.out.println(parent1.name);//parent
System.out.println(parent1.num);//0
parent1.mth();//parent
parent1.mth01();//重写
}
}
class Parent{
String name="parent"; //被隐藏的成员变量
int num;//未被隐藏
void mth(){
System.out.println("parent");//未被隐藏
}
void mth01(){//被隐藏
System.out.println("parent被隐藏的方法");
}
}
class Son extends Parent{
String name="son";//覆盖父类原有成员变量
String name01="anyan";//子类新增的成员变量
void mth01(){
System.out.println("重写");
}
void mth02(){
System.out.println("子类新增");
System.out.println(super.name);
super.mth01();
}
}
//我居然可以纯手敲代码,哈哈,开心!都是自己看完书之后总结出来的精华