在java 中,什么叫父类,什么叫子类

Python012

在java 中,什么叫父类,什么叫子类,第1张

父类和子类,就例如:老子和儿子,有着父子关系。而这里指的父子关系,其实也就是一种包含关系。打个比方,在我们现实生活中,学生Student是一个很大的概念,而U_Student大学生是属于学生中的一种,这里的学生即为父类,大学生即为子类。

父类和子类区别在哪?

学生和大学生都会有学习Study这个方法,但是大学生还会有自己特有的Study方法,两者还是有一定区别的,大学生的学习相较于其他学生来说,是更自由的。假如现在已经有一个学生(Student)类,然后我还要写一个大学生(U_Student)类,然后大学生UStudent类里有很多方法和Student里的方法都相同,但是还是有一小部分不同,怎样解决呢?难道还要重新写一个大学生类,并且重复敲一遍和学生类中一样的代码吗?那样浪费了时间和精力,并且浪费了存储空间,是很不划算的。所以,就有了“继承”。

子类继承父类,就是子类能引用父类中的某些东西。继承的关键字是extends,

例如:

public class Student(){}//父类

public class U_Student extends Student(){}//子类继承了父类

当子类和父类用一个同名方法,但是子类的实现却和父类不同,用到"方法重写"。

重写是指方法定义相同,但是实现不同,存在于父子类之间。

例如:

//父类

public class Student(){

//学习方法

public void study(){

System.out.println("我通过听老师讲课学习")

}

}

//子类

public class UStudent extends Student(){

public void study(){

System.out.println("我通过自习去学习")

}

}

编写JAVA作业时在继承的环节发现了一些错误,希望总结一些规律:(以下全部属于自己归纳,可能有问题)

一句话概括就是:子类一定会调用(不是继承)父类的构造方法!

即遵循一个原则:子类的构造一定是在父类已构造的基础上!

这句话要分为几种情况来理解(下面只讨论父类有构造函数):

子类构造函数自动调用super() (也可以手动加上)

但如果父类只有含参数的构造方法,那么子类必须申明一个构造方法,其中包含对super(args)的调用

一、父类含有无参构造函数

1、子类没有构造方法或者含有无参的构造方法:

这种情况,都会默认地调用super()

2、子类含有有参数构造方法:

同样会在首句默认调用super()//其实跟情况1类似

二、父类含有含参数的构造方法,不含无参数的构造方法:

子类没得选择:

子类必须申明一个构造方法(且含super的args),且方法里要首先调用super(args),否则报错。

三、父类含 含参数的构造方法和无参的构造方法:

此时子类可以选择性调用:

可以无构造方法:仍会默认调用super()

也可以有构造方法:其中会默认地调用super(),你也可以在开头加上这句,如果你不希望调用父类默认的无参方法,那么在 子类构造方法 中调用 父类含参构造方法。

上述看似情况复杂,其实基于其原则理解并不难。

综上:java为了保持 子类的构造基于父类的构造 这一原则,子类构造时必须通过某些方式首先调用父类的构造方法,否则会报错。

举个例子:

父类:A

子类:A1

子类:A2

父类中定义了一个方法method:,类A1和类A2有不同的实现,这是代码中定义一个类A,那么可以直接调用A的a方法即可,不用关心用A1还是A2去实例化的这个A对象,这就是多态的特性

A a

a = new A1()或a = new A2()

a.method()只要改变这个a的实例化方式,就能执行不同对象的方法。