java--继承,访问权限,方法(课堂)

时间:2022-09-20 08:52:05


 

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([参数列表])

 *  注意:1super([参数类别])必须方法子类构造方法的第一行

 *     2super([参数类别]) 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修饰的

 

 }

 

}