我是靠谱客的博主 拉长手机,最近开发中收集的这篇文章主要介绍JAVA中的隐藏和覆盖,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一.属性的隐藏:子类中声明了与超类中相同的成员变量名

    1.从超类继承的变量将被隐藏

    2.子类拥有了两个相同名字的变量,一个继承自超类,另一个由自己声明

    3.当子类执行继承自超类的操作时,处理的是继承自超类的变量,

        而当子类执行它自己声明的方法时,所操作的就是它自己声明的变量

栗子:

class Parent                                   class Child extends Parent    

{                                                       {

  int aNumber;                                             float aNumber;          

}                                                         }


二.访问被隐藏的超类属性

    1.调用从超类继承的方法,则操作的是从超类继承的属性

    2.子类中声明的方法是用 "super.属性" 访问从超类继承的属性


栗子:属性的隐藏

class A1
{
    int x = 2;
    public void setX(int i)
   {
      x =i ;
    }
   void printa()
   {
     System.out.println(x);
    }
}
class B1 extends A1
{
int x = 10;
void printb()
   {
     super.x = super.x + 10;
     System.out.println("super.x = " + super.x + " x= " + x);
    }
}
public class Test{
public static void main(String[] args)
{
   A1 a1 = new A1();
   a1.setX(4);
   a1.printa();  //打印结果: 4

   B1 b1 = new B1();
   b1.printb();    //打印结果: super.x = 12  x = 100
   b1.printa();   //打印结果: 12
   
   b1.setX(6);    //将继承的X值 设置为6
   b1.printb();   //打印结果: super.x = 16  x = 100
   b1.printa();   //打印结果:16
   a1.printa();   //打印结果:4
}
}

栗子:访问超类静态属性

class A1
{
    static int x = 2;
    public void setX(int i)
   {
      x =i ;
    }
   void printa()
   {
     System.out.println(x);
    }
}
class B1 extends A1
{
int x = 10;
void printb()
   {
     super.x = super.x + 10;
     System.out.println("super.x = " + super.x + " x= " + x);
    }
}
public class Test{
public static void main(String[] args)
{
   A1 a1 = new A1();
   a1.setX(4);
   a1.printa();  //打印结果: 4

   B1 b1 = new B1();
   b1.printb();    //打印结果: super.x = 14  x = 100
   b1.printa();   //打印结果: 14
   
   b1.setX(6);    //将继承的X值设置为6
   b1.printb();   //打印结果: super.x = 16  x = 100
   b1.printa();   //打印结果:16
   a1.printa();   //打印结果: 16
}
}   //结论:在继承过程中,超类的静态属性不会被继承,但它可以被本来的对象和子类的对象所访问

三. 方法覆盖:子类定义了重名的方法,那么从超类继承来的方法就被覆盖了

1.覆盖方法的返回类型,方法名称,参数的个数及类型必须和被覆盖的方法一模一样

2.只需在方法名前面使用不同的类名 或 不同类的对象名即可覆盖方法和被覆盖方法

3.覆盖方法的访问权限可以比被覆盖的宽松,但是不能更为严格

4.调用被覆盖的方法: super.被覆盖的方法名();

方法覆盖的注意事项

1.必须覆盖的方法:子类必须覆盖超类中的抽象方法,否则派生类自身也成为抽象类

2.不能覆盖的方法:  超类中声明为final的终结方法,超类中声明为static的静态方法


 


最后

以上就是拉长手机为你收集整理的JAVA中的隐藏和覆盖的全部内容,希望文章能够帮你解决JAVA中的隐藏和覆盖所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部