举报投诉联系我们 手机版 热门标签 名动网
您的位置:名动网 > java继承中的隐藏 Java 继承隐藏

java继承中的隐藏 Java 继承隐藏

2023-03-06 23:20 Java教程

java继承中的隐藏 Java 继承隐藏

java继承中的隐藏

Java继承中的隐藏是指子类可以访问父类的成员变量和成员方法,但是不能直接访问父类的private成员变量和private成员方法。这是因为Java中的封装性,它要求子类不能直接访问父类的private成员变量和private成员方法,而必须通过public或protected来实现。

隐藏是一个非常有用的特性,它允许子类使用已有的代码,而无需重新实现它们。这样可以减少代码重复,提高代码复用性。此外,隐藏也有助于保护数据不受意外修改,因为子类无法直接访问private成员变量和private成员方法。

在Java中,隐藏也有一些陷阱。例如:如果子类覆盖了一个public方法(即使该方法在子类中声明为private也是如此),则该方法将仍然具有public访问权限。因此,在覆盖public方法时应特别小心。

class Parent { 
    private void method1() { 
        System.out.println("Parent's method1()"); 
    } 

    public void method2() { 
        System.out.println("Parent's method2()"); 
    } 
} 

 class Child extends Parent { 

    public void method1() { // 子类覆盖了method1() 
        System.out.println("Child's method1()");   // 该方法仍然具有public权限  
    }  

    private void method2() { // 子类声明method2()为private   // 该方法将不能在外部使用  
        System.out.println("Child's method2()");   // 因为它已声明为private  
    }  

 } 

 public class Test {  

     public static void main(String[] args) {  

         Child c = new Child();  

         c.method1(); // 输出"Child's method1"  

         c.method2(); // 由于method2声明为private, 此行代码将出错!    

     }     

 }  

Java 继承隐藏

Java面向对象的设计 - Java继承隐藏

方法隐藏

类从其超类继承所有非私有静态方法。

重定义类中继承的静态方法称为方法隐藏。

子类中的重定义静态方法隐藏其超类的静态方法。

在类中重定义非静态方法称为方法覆盖。

关于方法隐藏的重定义方法(名称,访问级别,返回类型和异常)的所有规则与方法覆盖相同。

class MySuper {
  public static void print() {
    System.out.println("Inside MySuper.print()");
  }
}

class MySubclass extends MySuper {
  public static void print() {
    System.out.println("Inside MySubclass.print()");
  }
}

public class Main {
  public static void main(String[] args) {
    MySuper mhSuper = new MySubclass();
    MySubclass mhSub = new MySubclass();
    MySuper.print();
    MySubclass.print();
    ((MySuper) mhSub).print();
    mhSuper = mhSub;
    mhSuper.print();
    ((MySubclass) mhSuper).print();
  }
}

上面的代码生成以下结果。

字段隐藏

类中的字段声明(静态或非静态)在其父类中隐藏具有相同名称的继承字段。

在字段隐藏的情况下,不考虑字段的类型及其访问级别。

字段隐藏仅基于字段名称。

class MySuper {
  protected int num = 100;
  protected String name = "Tom";
}

class MySub extends MySuper {
  public void print() {
    System.out.println("num: " + num);
    System.out.println("name: " + name);
  }
}

class MySub2 extends MySuper {
  // Hides num field in MySuper class
  private int num = 200;

  // Hides name field in MySuper class
  private String name = "Jack";

  public void print() {
    System.out.println("num: " + num);
    System.out.println("name: " + name);
  }
}

public class Main {
  public static void main(String[] args) {
    MySub fhSub = new MySub();
    fhSub.print();
    MySub2 fhSub2 = new MySub2();
    fhSub2.print();
  }
}

上面的代码生成以下结果。

例子

以下代码显示了如何使用super关键字访问超类的隐藏字段

class MySuper {
  protected int num = 100;
  protected String name = "Tom";
}

class MySub extends MySuper {
  // Hides the num field in MySuper class
  private int num = 200;

  // Hides the name field in MySuper class
  private String name = "Jack";

  public void print() {
    System.out.println("num: " + num);
    System.out.println("super.num: " + super.num);
    System.out.println("name: " + name);
    System.out.println("super.name: " + super.name);
  }
}

public class Main {
  public static void main(String[] args) {
    MySub s = new MySub();
    s.print();
  }
}

上面的代码生成以下结果。

字段隐藏发生在一个类声明一个变量与来自其超类的继承变量具有相同名称的时候。

字段隐藏仅基于字段的名称。

类应该使用关键字super来访问超类的隐藏字段。

类可以使用简单的名称来访问其主体中的重定义字段

阅读全文
以上是名动网为你收集整理的java继承中的隐藏 Java 继承隐藏全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 名动网 mdwl.vip 版权所有 联系我们