子类继承父类继承父类无参的构造方法问题……

时间:2022-01-27 19:30:02
class Person{

String name;

private int age;

public  Person(String name){
this.name = name;
}

/*public Person(){
System.out.println("Person类的构造方法被调用了....");
}
*/

public void eat(){
System.out.println(name+"在吃饭...");
}
}


class Student extends Person {  // Student 就称作为Person类的子类, Person类就称作为Student的父类(超类、基类)

int num; //学号

public Student(){
System.out.println("Student类的构造方法被调用了....");
}

public void study(){
System.out.println(name+"good good study , day day up");
}
}




class Demo2
{
public static void main(String[] args) 
{
Student s = new Student();//注意:只要这个对象一创立,马上调用子类和父类的构造函数,默认先调用父类!子类如果没有无参的构造函数,JVM会创建,父类没有就报错


}
}

这个是视频里面的例子,继承类在创建对象的时候,如果没有指定的函数,那么会默认调用父类的无参构造方法,父类如果没有就报错,这个例子我把父类无参构造函数标注了,确实报错!但是我自己练习的时候,随便写的一个小例子,父类毛的函数都没有,创建对象为什么屁事没有呢?根本没报错啊!
 class Student{
int id;
String name;
int age ;


}
class WorkStudent extends Student{
int workage;
/*public  void study(){
System.out.println(name+"好好敲代码,将来成为高富帅");
}
*/
}



class Demo1
{
public static void main(String[] args) 
{  WorkStudent w = new WorkStudent();

}
}


[

6 个解决方案

#1


如果你不写任何构造函数,会自动添加一个默认无参函数
如果你写了任何带参的构造函数,无参的构造函数不会自动添加,需要手动写一个
你自己写的都是系统默认的无参构造函数

#2


引用 1 楼 qq118194716 的回复:
如果你不写任何构造函数,会自动添加一个默认无参函数
如果你写了任何带参的构造函数,无参的构造函数不会自动添加,需要手动写一个
你自己写的都是系统默认的无参构造函数

我实验了一下,子类写个带参的构造函数,没有无参的构造函数,不报错!但是父类如果写了一个带参的构造函数,没有无参的构造函数就马上报错……看来父类必须要有无参的构造函数,或者super指定调用父类的函数,否则就马上报错!

#3


引用 2 楼 baiyouwei 的回复:
Quote: 引用 1 楼 qq118194716 的回复:

如果你不写任何构造函数,会自动添加一个默认无参函数
如果你写了任何带参的构造函数,无参的构造函数不会自动添加,需要手动写一个
你自己写的都是系统默认的无参构造函数

我实验了一下,子类写个带参的构造函数,没有无参的构造函数,不报错!但是父类如果写了一个带参的构造函数,没有无参的构造函数就马上报错……看来父类必须要有无参的构造函数,或者super指定调用父类的函数,否则就马上报错!


确实是这么个道理,你不指定,就默认调到父类的无参构造上去了

#4


如果你父类没有写构造函数,是存在有一个默认无参构造函数的;但是如果父类写了有参构造函数,那么父类就不存在无参构造函数了。

#5


无参构造函数是隐式的,如果你不创建构造函数,在实例化对象时系统会自动帮你自动创建。如果你自己写了构造函数,就不会自动创建,要自己手写

#6


引用 4 楼 Hall_P 的回复:
如果你父类没有写构造函数,是存在有一个默认无参构造函数的;但是如果父类写了有参构造函数,那么父类就不存在无参构造函数了。

说的很对

#1


如果你不写任何构造函数,会自动添加一个默认无参函数
如果你写了任何带参的构造函数,无参的构造函数不会自动添加,需要手动写一个
你自己写的都是系统默认的无参构造函数

#2


引用 1 楼 qq118194716 的回复:
如果你不写任何构造函数,会自动添加一个默认无参函数
如果你写了任何带参的构造函数,无参的构造函数不会自动添加,需要手动写一个
你自己写的都是系统默认的无参构造函数

我实验了一下,子类写个带参的构造函数,没有无参的构造函数,不报错!但是父类如果写了一个带参的构造函数,没有无参的构造函数就马上报错……看来父类必须要有无参的构造函数,或者super指定调用父类的函数,否则就马上报错!

#3


引用 2 楼 baiyouwei 的回复:
Quote: 引用 1 楼 qq118194716 的回复:

如果你不写任何构造函数,会自动添加一个默认无参函数
如果你写了任何带参的构造函数,无参的构造函数不会自动添加,需要手动写一个
你自己写的都是系统默认的无参构造函数

我实验了一下,子类写个带参的构造函数,没有无参的构造函数,不报错!但是父类如果写了一个带参的构造函数,没有无参的构造函数就马上报错……看来父类必须要有无参的构造函数,或者super指定调用父类的函数,否则就马上报错!


确实是这么个道理,你不指定,就默认调到父类的无参构造上去了

#4


如果你父类没有写构造函数,是存在有一个默认无参构造函数的;但是如果父类写了有参构造函数,那么父类就不存在无参构造函数了。

#5


无参构造函数是隐式的,如果你不创建构造函数,在实例化对象时系统会自动帮你自动创建。如果你自己写了构造函数,就不会自动创建,要自己手写

#6


引用 4 楼 Hall_P 的回复:
如果你父类没有写构造函数,是存在有一个默认无参构造函数的;但是如果父类写了有参构造函数,那么父类就不存在无参构造函数了。

说的很对