java继承函数是什么 什么是继承,试说明在java中实现多继承的方法
大家好,关于java继承函数是什么很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于什么是继承,试说明在java中实现多继承的方法的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
Java中的构造函数继承
专家读书笔记希望能够对大家学习java有所帮助
每个子类构造方法的第一条语句都是隐含地调用super()如果父类没有这种形式的构造函数那么在编译的时候就会报错
这句话怎么理解
所有代码都经过测试测试环境
java version rc
Java(TM) Runtime Environment Standard Edition(build rc b)
Java HotSpot(TM) Client VM(build rc b mixed mode)
如大家发现任何错误或有任何意见请不吝赐教
缺省构造函数的问题 base类是父类 derived类是子类首先要说明的是由于先有父类后有子类所以生成子类之前要首先有父类
class是由class的构造函数constructor产生的每一个class都有构造函数如果你在编写自己的class时没有编写任何构造函数那么编译器为你自动产生一个缺省default构造函数这个default构造函数实质是空的其中不包含任何代码但是一牵扯到继承它的问题就出现了
如果父类base class只有缺省构造函数也就是编译器自动为你产生的而子类中也只有缺省构造函数那么不会产生任何问题因为当你试图产生一个子类的实例时首先要执行子类的构造函数但是由于子类继承父类所以子类的缺省构造函数自动调用父类的缺省构造函数先产生父类的实例然后再产生子类的实例如下
class base{
}
class derived extends base{
public static void main(String[] args){
derived d=new derived();
}
}
下面我自己显式地加上了缺省构造函数
class base{
base(){
System out println( base constructor);
}
}
class derived extends base{
derived(){
System out println( derived constructor);
}
public static void main(String[] args){
derived d=new derived();
}
}
执行结果如下说明了先产生base class然后是derived class
base constructor
derived constructor
我要说明的问题出在如果base class有多个constructor
而derived class也有多个constructor这时子类中的构造函数缺省调用那个父类的构造函数呢?答案是调用父类的缺省构造函数但是不是编译器自动为你生成的那个缺省构造函数而是你自己显式地写出来的缺省构造函数
class base{
base(){
System out println( base constructor);
}
base(int i){
System out println( base constructor int i);
}
}
class derived extends base{
derived(){
System out println( derived constructor);
}
derived(int i){
System out println( derived constructor int i);
}
public static void main(String[] args){
derived d=new derived();
derived t=new derived();
}
}
D: java thinking think> java derived
base constructor
derived constructor
base constructor
derived constructor int i
如果将base类的构造函数注释掉则出错
class base{
// base(){
// System out println( base constructor);
//}
base(int i){
System out println( base constructor int i);
}
}
class derived extends base{
derived(){
System out println( derived constructor);
}
derived(int i){
System out println( derived constructor int i);
}
public static void main(String[] args){
derived d=new derived();
derived t=new derived();
}
}
D: java thinking think> javac derived java
derived java:: cannot resolve symbol
symbol: constructor base()
location: class base
derived(){
^
derived java:: cannot resolve symbol
symbol: constructor base()
location: class base
derived(int i){
errors
说明子类中的构造函数找不到显式写出的父类中的缺省构造函数所以出错
那么如果你不想子类的构造函数调用你显式写出的父类中的缺省构造函数怎么办呢?
如下例
class base{
// base(){
// System out println( base constructor);
//}
base(int i){
System out println( base constructor int i);
}
}
class derived extends base{
derived(){
super();
System out println( derived constructor);
}
derived(int i){
super(i);
System out println( derived constructor int i);
}
public static void main(String[] args){
derived d=new derived();
derived t=new derived();
}
}
D: java thinking think> java derived
base constructor int i
derived constructor
base constructor int i
derived constructor int i
super(i)表示父类的构造函数base(i)请大家注意一个是super(i)一个是super()大家想想是为什么??
lishixinzhi/Article/program/Java/hx/201311/27071java继承的作用
(1)继承关系是传递的。若类C继承类B,类B继承类A,则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
(2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
(3)继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
(4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
(5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。
什么是继承,试说明在java中实现多继承的方法
JAVA里没有多继承,一个类之能有一个父类。
而继承的表现就是多态。一个父类可以有多个子类,而在子类里可以重写父类的方法(例如方法print()),这样每个子类里重写的代码不一样,自然表现形式就不一样。这样用父类的变量去引用不同的子类,在调用这个相同的方法print()的时候得到的结果和表现形式就不一样了,这就是多态,相同的消息(也就是调用相同的方法)会有不同的结果。举例说明:
//父类
public class Father{
//父类有一个打孩子方法
public void hitChild(){}
}
//子类1
public class Son1 extends Father{
//重写父类打孩子方法
public void hitChild(){
System.out.println("为什么打我?我做错什么了!");}
}
//子类2
public class Son2 extends Father{
//重写父类打孩子方法 public void hitChild(){
System.out.println("我知道错了,别打了!");}
}
//子类3
public class Son3 extends Father{
//重写父类打孩子方法 public void hitChild(){
System.out.println("我跑,你打不着!");}
}
//测试类
public class Test{
public static void main(String args[]){
Father father;
father= new Son1();
father.hitChild();
father= new Son2();
father.hitChild();
father= new Son3();
father.hitChild();
}
}
都调用了相同的方法,出现了不同的结果!这就是多态的表现!
2.JAVA中没有多继承,而用接口实现了多继承!一个类或是可以同时实现多个接口!(就相当于C++里一个类同时继承了多个类!)例如:
public class Son implements Father1,Father2,Father3{
}
接口有利于代码功能的扩展(增加新的功能)!而继承则有利于代码功能的修改(把旧的功能改成新的功能)!这里旧功能的修改和新功能的增加前提是不修改旧的功能,旧的功能仍然可以使用!旧类的代码也不做修改!
接着上面的继承举例:上面例子中的子类我们统称为一代子类
1.用继承修改旧的功能。
现在如果一代Son1的功能打孩子,也就是方法hitChild()里边的功能实现有问题,我们要把具体实现修改掉,那么我们可以重新写一个新的二代子类Son11继承自一代子类Son1,并重写其hitChild()方法。
//二代子类
public class Son11 extends Son1{
//重写父类打孩子方法
public void hitChild(){ System.out.println("我是二代子类对此方法的新实现");
}
}
2.用接口实现增加新的功能。
现在类Son1已经有了‘打孩子’功能(也就是方法),而我们有了新的需求,我们需要它还要有一个新的功能‘宠孩子’(新方法pet();)。而旧的代码不能动!那么我们可以定义一个新的接口(PetInterFace),接口里定义这个方法pet()的声明。再重新写一个二代子类Son11,让它先继承类Son1,同时实现接口 PetInterFace!并实现接口里的 pet()方法!
//新接口
public interface PetInterFace{
//新功能方法 public void pet();
}
//二代子类
public class Son11 extends Son1 implements PetInterFace{
//实现接口方法
public void pet(){
System.out.println("父亲很爱我!");
}
}
这样这个二代子类即有了老的方法,又有新的功能!
java继承函数是什么和什么是继承,试说明在java中实现多继承的方法的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!