publicclass Father {
public Stringname ="father";//带权限访问修饰符的方法
StringdefaultName ="fatherDefaultName";
publicintage;//
public Father(){
System.out.println("这个是Father里面的构造方法....");
}
publicvoid mether(){
System.out.println("father中的method方法");
}
}
package com.lijie.lianxi7;
/*
*继承的知识点:
*
*属性:
* 1、对象访问属性的顺序,在方法中,如果要访问某个属性时,
* 1>找局部变量是否有这个属性(同名)
* 2>找本类中是否有成员变量(同名) 使用this.属性
* 3>找父类中的成员变量(同名) super.属性
*
* 注意点:本类存在某个属性或某个方法, 父类也存在,这个时候,父类的属性或者方法
* 会被隐藏。
*
* 2、父类属性访问权限
* 使用public 子类可以访问,不管同包或者不同包
* default 子类只能在同包下访问
* protected子类在同包下访问,如果子类跟父类不在同一个包下,
* 在子类内部,依然可以访问父类使用protected修饰的属性或方法
*
*构造方法:
* 1、子类继承父类,在创建子类对象时,必须先创建父类的对象
* 因为:子类访问父类的非静态属性或方法时,需要父类对象(构造方法)进行调用
*
* 2、创建子类对象时,必须先创建父类的对象,默认调用父类无参数构造方法
* 如果想指定调用父类某个一个构造方法,需要使用super([参数列表])
* 注意:1、super([参数类别])必须方法子类构造方法的第一行
* 2、super([参数类别])跟 this(([参数类别]))无法同时存在同一个构造方法中
* 3、父类尽量显示写空参数构造方法,减少不必要的错误
*
*普通方法
*
*/
publicclass Sonextends Father {
public Stringname ="son";
public Son(){
System.out.println("这个是son无参数的构造方法....");
}
publicvoid method(){
System.out.println("son中的method方法");
}
publicvoid info(){
String name ="局部变量name";
// this.name -- > son类的对象属性,如果son类没有定义name这个属性,
//那么this.name表示父类的name属性
//System.out.println(this.name);
//super.name ---> father类的对象属性
//System.out.println(super.name);
//对象访问属性的顺序
//在方法中,如果要访问某个属性时,
// 1、找局部变量是否有这个属性(同名)
// 2、找本类中是否有成员变量(同名) 使用this.属性
// 3、找父类中的成员变量(同名) super.属性
System.out.println(name);////////////局部变量name,,由近到远的去查找
System.out.println(this.name);//son,,由近到远的去查找,但是不找局部变量,只找成员变量
System.out.println(super.name);// father,,直接找父类
//this.method();
//super.method();
System.out.println("是否能调用fatherdefaultName..........");//是否能调用fatherdefaultName..........
System.out.println(super.defaultName);/////////////// fatherDefaultName
}
publicstaticvoid main(String[]args) {
Son son =new Son();
son.info();
}
}
package com.lijie.lianxi7.sub;
import com.lijie.lianxi7.Father;
publicclass Son2extendsFather{
publicvoid info(){
System.out.println("是否能调用fatherdefaultName..........");
//The field Father.defaultName is not visible
//System.out.println(super.defaultName);
System.out.println("是否能调用protectedName..........");
System.out.println(super.protectedName);
}
publicstaticvoid main(String[]args) {
//Son son = new Son();
//The field Father.protectedName is notvisible
//System.out.println(son.protectedName);
Son2 son2 =new Son2();
System.out.println(son2.protectedName);
}
}
package com.lijie.lianxi7.sub;
import com.lijie.lianxi7.Father;
import com.lijie.lianxi7.Son;
publicclass Test {
publicstaticvoid main(String[]args) {
Sonson =new Son();//挎包要把相应的包导进来
//The field Father.protectedName is not visible
System.out.println(son.protectedName);//跨包,跨类无法访问protectedName修饰的类型,只能访问public修饰的
Fatherf =new Father();//挎包要把相应的包导进来
System.out.println(f.protectedName);//跨包,跨类无法访问protectedName修饰的类型,只能访问public修饰的
Son2son2 =new Son2();
//The field Father.protectedName is not visible
System.out.println(son2.protectedName);//跨包,跨类无法访问protectedName修饰的类型,只能访问public修饰的
}
}