「java隐藏继承」java继承中的隐藏
本篇文章给大家谈谈java隐藏继承,以及java继承中的隐藏对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、在JAVA子类一旦重写了继承的方法,就会隐藏继承的方法.是这样吗?
- 2、有人可以告诉我JAVA中子类继承父类中,什么叫做子类方法的隐藏,重载和隐藏?
- 3、java 继承 变量的隐藏
- 4、请问java是用什么方式实现继承,覆盖、隐藏的。
- 5、JAVA继承中关于变量的隐藏的问题:
在JAVA子类一旦重写了继承的方法,就会隐藏继承的方法.是这样吗?
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以分隔符先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。
特点:
(1)继承关系是传递的。若类C继承类B,类B继承类A,则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
(2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
(3)继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
(4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
(5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。
所以你的理解也是可以的,是覆盖了父类的方法。也可以叫屏蔽了父类的方法。
有人可以告诉我JAVA中子类继承父类中,什么叫做子类方法的隐藏,重载和隐藏?
一、重载(overload)
方法重载就是一个类中定义多个同名的方法,但要求每个方法具有不同的参数类型或者不同的参数个数。重载与返回值的类型和修饰符无关。
[java] view plain copy
class test{
public int fun(int a){}
public string fun(string a){}
public float fun(int a,string b){}
public float fun(string a,int b){}
void string fun(float a){}
void string fun(int a){}//该方法不是重载
}
前五个方法互为重载方法,第一个和第六个不是重载方法(虽然两个方法的返回值类型不同,但两个方法的名字相同,参数个数和参数类型都相同)。所以重载方法的返回值类型不一定相同,方法名一定相同,参数类型或个数一定不同。
二、重写(override)
当子类继承父类,子类中方法的名称,参数类型,参数个数与父类中的方法都完全一致,则认为子类中的方法重写了父类中的方法。
[java] view plain copy
public class Parent {
public void fun1(int i){
/*do something...*/
}
public String fun2(){
return "parent";
}
}
public class Child extends Parent{
public void fun1(int i){
/*do other something...*/
}
public String fun2(){
return "child";
}
}
重写的规则:
(1)重写方法不能比被重写方法限制更严格的访问级别,即访问权限可以是扩大但不能缩小父类与子类的访问权限可以是public和public,protected和protected,protected和public,但不能是public和protected。
(2)标识为final的方法不能被重写,静态方法不能被重写。
(3)重写方法的返回类型必须与被重写方法的返回类型相同
(4)重写方法的参数列表必须与被重写方法的参数列表相同。
(5)重写方法不能抛出新的异常,或者比被重写方法声明的检查异常更广的检查异常,但可以抛出更少或者不抛出异常。
(6)抽象方法必须在具体类中被重写。
三、隐藏()
隐藏发生在子类与父类之间,隐藏是针对父类中的成员变量和静态方法而言。当子类声明了与父类相同的变量名的变量时就实现了对父类成员变量的隐藏。当子类声明了与父类的静态成员方法中相同方法名,相同参数列表和相同返回类型的方法,则实现了对父类静态方法的隐藏。
原则:静态方法被隐藏,实例方法被覆盖(重写),父类中的成员变量能够被子类中的同名变量隐藏,但局部变量和形参不会被隐藏。
java 继承 变量的隐藏
this,是这个的意思,相信你也知道。他在父类里面,也就是说,不管你怎么调用,他调用的都是父类里面的那个a,除非你把this.a写字son类中。
请问java是用什么方式实现继承,覆盖、隐藏的。
继承:java用关键字extends来实现继承
覆盖:java中通过方法重写来覆盖
隐藏:java 通过封装来实现隐藏
-------------------------------------------------------------------------------------------------------
父类的私有成员没有被继承.
------------------------------------------------------------------
当程序被调用的时候,JVM才为对象分配内存!(静态变量除外)
鸡蛋里有蛋黄,这就是模型!鸡蛋是子类,蛋黄是父类
-----------------------------------------------------------------
代码执行顺序
在子类中隐藏有父类的构造器.子类实例化的时候,首先会先实例化父类.
如果子类中重写了父类的方法,在父类的构造器中会把子类中重写的父类的方法一起构造.
在堆内存中分配父类对象的空间,并在栈内存中分配指向对堆内存对象空间引用的实例.构造完父类实例.然后构造子类实例!
JAVA继承中关于变量的隐藏的问题:
在java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换。
在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。因为子类拥有比父类更多的属性、更强的功能,所以父
类转换为子类需要强制。那么,是不是只要是父类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的。
当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了。在Java中我们可以通过继承、向上转型的
关系使用父类类型来引用它,这个时候我们是使用功能较弱的类型引用功能较强的对象,这是可行的。但是将功能较弱的类型强制转功能较强的对象时,就不一定可
以行了。
举个例子来说明。比如系统中存在Father、Son两个对象。首先我们先构造一个Son对象,然后用一个Father类型变量引用它:
Father father = new Son();
在这里Son 对象实例被向上转型为father了,但是请注意这个Son对象实例在内存中的本质还是Son类型的,只不过它的能力临时被消弱了而已,如果我们想变强怎么办?将其对象类型还原!
Son son = (Son)father;
这条语句是可行的,其实father引用仍然是Father类型的,只不过是将它的能力加强了,将其加强后转交给son引用了,Son对象实例在son的变量的引用下,恢复真身,可以使用全部功能了。
前面提到父类强制转换成子类并不是总是成功,那么在什么情况下它会失效呢?
当引用类型的真实身份是父类本身的类型时,强制类型转换就会产生错误。例如:
Father father = new Father();
Son son = (Son) father;
这个系统会抛出ClassCastException异常信息。
所以编译器在编译时只会检查类型之间是否存在继承关系,有则通过;而在运行时就会检查它的真实类型,是则通过,否则抛出ClassCastException异常。
所以在继承中,子类可以自动转型为父类,但是父类强制转换为子类时只有当引用类型真正的身份为子类时才会强制转换成功,否则失败。
java隐藏继承的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java继承中的隐藏、java隐藏继承的信息别忘了在本站进行查找喔。
发布于:2022-12-15,除非注明,否则均为
原创文章,转载请注明出处。