首页 > 编程语言 >java子类对父类继承的属性在不同修饰词下的访问权限

java子类对父类继承的属性在不同修饰词下的访问权限

时间:2022-10-05 14:46:19浏览次数:78  
标签:修饰词 java 继承 子类 成员 int 父类 public

父类中的属性和方法可以被子类继承

子类中继承了父类中的属性和方法后,在子类中能不能直接使用这些属性和方法:和这些属性和方法原有的修饰符(public protected default private)相关。

例如 :

根据父类成员的 访问权限修饰词分为两种情况:

①父类成员域由private修饰,那么在子类中不能直接访问父类成员域,但是可以通过类中的公共方法访问以及修改父类成员域。如:

class FatherClass{
   private int a;
    //可以通过公共方法操作父类私有内容
   public int geta(){ return a;}
   public void seta(int a){this.a=a;}
}

则在子类中可以通过geta获得父类的成员域的值,通过seta修改父类成员域的值

②父类成员由public或protected或default(不写访问权限修饰词),在子类中可以直接访问父类成员域,可以修改继承的父类成员域,但是不能直接修改父类本身的成员域(可以通过上面所说的public void seta(int a){this.a=a;}对父类本身的成员域进行修改),以下是示例代码:

package gunjo.kirito.union.papertest;

class FatherClass {
    int a;// 非私有

    //注意有继承关系的话,作为父类必须写默认构造
    public FatherClass() {
        a = 10;// 父类本身的a
    }
}

public class ChildClass extends FatherClass {
    int a;

    public ChildClass() {
        this.a = 1;// 子类本身的a
        super.a = 100;// 继承的父类a,与父类本身处于不同空间

    }

    public void show() {
        System.out.println("子类的a:" + a);
        System.out.println("继承的a:" + super.a);//把上面子类构造中super.a=100注释掉的话,后面打印时继承的a:10
        // 此处是继承的父类成员域,而不是父类本身的成员域
    }

    public static void main(String[] args) {
        FatherClass fc = new FatherClass();
        System.out.println("父类本身的a:" + fc.a);
        ChildClass cc = new ChildClass();
        cc.show();
    }
    
}

运行结果:image

父类本身的a与子类从父类继承的a占据两个不同的独立的存储空间,在继承之后,他们的值互不相干(继承的时候进行值传递),这样可以避免因为子类中的操作而导致对父类的a的值进行预期结果之外的修改

另外,

父类中的构造器是不能被子类继承的,但是子类的构造器中,会隐式的调用父类中的无参构造器(默认使用 super关键字)。

image

标签:修饰词,java,继承,子类,成员,int,父类,public
From: https://www.cnblogs.com/bleu/p/16755546.html

相关文章