package Demo6;/*
在继承的关系中,子类也可以被看作子类
定义父类的格式:(一个普通的类)
public class 父类名称{
...
}
定义子类的格式:
public class 子类名称 extends 父类名称{
...
}
*/publicclassDemoExtends{publicstaticvoidmain(String[] args){//创建一个主类对象
Teacher teacher =newTeacher();//Teacher类中什么也没写,但是继承来自父类的method方法
teacher.method();//创建另一个子类助教的对象
Assistant assistant =newAssistant();
assistant.method();}}
package Demo6;publicclassFu{int numFu =10;int num =100;publicvoidmethodFu(){//使用的是本类当中的,不会向下找子类
System.out.println(num);}}
package Demo6;publicclassZiextendsFu{int numZi =20;int num =200;publicvoidmethodZi(){//本类有,用的是本类的
System.out.println(num);}}
package Demo6;/*
在父子类的继承关系中,如果成员变量重名,则创建子类对象时,访问有两种方式
直接通过子类对象访问成员变量
等号左边是谁,就优先用谁,没有则向上找。
间接通过成员方法访问成员变量
方法属于谁就优先用谁,没有则向上找
*/publicclassDemoExtendsField{publicstaticvoidmain(String[] args){
Fu fu =newFu();//创建父类10
System.out.println(fu.numFu);//只能使用父类的东西,没有任何子类的东西
Zi zi =newZi();
System.out.println(zi.numFu);//10
System.out.println(zi.numZi);//20
System.out.println("============");// 等号左边是谁,就优先用谁,
System.out.println(zi.num);//优先用子// System.out.println(zi.abc);//都没有,编译报错!
System.out.println("===============");//方法是子类的,优先用子类的,没有向上找
zi.methodZi();//200//
zi.methodFu();//100}}
package Demo7;publicclassFu{int num =10;}
package Demo7;publicclassZiextendsFu{int num =20;publicvoidmethod(){int num =30;
System.out.println(num);//30,局部变量
System.out.println(this.num);//20,本累的成员变量
System.out.println(super.num);//10,父类的成员变量}}
package Demo7;/*
局部变量: 直接写成员变量名
本类的成员变量: this.成员变量名
父类中的成员变量: super.成员变量名
*/publicclassDemoExtendsField{publicstaticvoidmain(String[] args){
Zi zi =newZi();
zi.method();}}