当前位置:首页 » 编程语言 » java继承构造

java继承构造

发布时间: 2022-06-10 16:28:21

1. java继承里关于构造方法的问题。

首先说不要用显式这种词语,哈佛大学的教授比起野鸡大学里的教授区别就是他说的你能懂。然后AB在不在一个包里没有区别,导入之后就在一个包里了。B默认继承A的构造方法,B必须要重写A的方法,具体为啥我忘了。这个问题是可以改进的,但是java规定子类必须重写,反正就这样记住就好了。另外protected的范围是父类子类,和包没有关系。

2. java 在继承中的构造方法

java继承中对构造函数是不继承的,只是调用(隐式或显式)。
举例说明:
public class FatherClass {
public FatherClass() {
System.out.println(100);
}
public FatherClass(int age) {
System.out.println(age);
}
}
public class SonClass extends FatherClass{
public SonClass() {
}
public SonClass(int c) {
System.out.println(1234);
}

public static void main(String[] args) {
SonClass s = new SonClass(66);
}
}
编译后执行结果如下:
分析:SonClass s = new SonClass(66);
执行这句时,调用
public SonClass(int c) {
System.out.println(1234);//系统会自动先调用父类的无参构造函数(super())
}

在这个构造函数中,等价于
public SonClass(int c) {
super();//必须是第1行,否则不能编译
System.out.println(1234);
}
所以结果是 100 1234
在创建子类的对象时,Java虚拟机首先执行父类的构造方法,然后再执行子类的构造方法。在多级继承的情况下,将从继承树的最上层的父类开始,依次执行各个类的构造方法,这可以保证子类对象从所有直接或间接父类中继承的实例变量都被正确地初始化。
3.如果子类构造函数是这样写的
public SonClass(int c) {
super(22);//必须是第1行,否则不能编译
//显式调用了super后,系统就不再调用无参的super()了;
System.out.println(1234);
}
执行结果是 22
1234
总结1:构造函数不能继承,只是调用而已。
如果父类没有无参构造函数
创建子类时,不能编译,除非在构造函数代码体中第一行,必须是第一行显式调用父类有参构造函数
如下:
SonClass (){
super(777);//显示调用父类有参构造函数
System.out.println(66);
}
如果不显示调用父类有参构造函数,系统会默认调用父类无参构造函数super();
但是父类中没有无参构造函数,那它不是不能调用了。所以编译就无法通过了。
总结2:创建有参构造函数后,系统就不再有默认无参构造函数。
如果没有任何构造函数,系统会默认有一个无参构造函数。

3. java构造函数继承问题

构造函数不能被继承,跟你的这个问题没关系的:
在子类实例化之前,要确保父类已经实例化,否则就会报错;
如果父类有默认的构造函数 ,根据你的例子中来举例,即:public Person(){};
则子类在继承时,会在其默认的构造方法里调用父类的构造方法,即:
public Student() { super();}
在没有显示定义构造函数的时候,上面的例子就是默认的构造函数,隐藏着的;
如果父类显示定义有构造函数,则默认的构造函数不存在了;
在他继承的子类中,默认的构造函数无法自动调用父类的构造函数就会报错了;
你在子类中写这样一个构造函数,就不会报错;也容易理解;
public Student(){
super("", 0);
};
另外:构造函数不能被继承,是说子类不能直接用父类的构造函数来实例化;
应该解释的比较清楚了!

4. java构造函数能否被继承,为什么

不能,因为子类继承父类的时候,先运行父类构造函数;具体的说就是运行父类时就会先“调用”父类的构造函数,注意“调用”和继承不是一个含义,实质上是“自动运行”。
继承(extends)的含义其实是“扩展”,子类完全没必要扩展父类的构造函数,因为反正每次调子类的时候都会“自动运行”它父类的构造函数,如果真的需要子类构造函数特殊的形式,子类直接修改或重载自己的构造函数就好了。

估计是你对“构造函数”的意义本身不理解,“调用”一个类有“继承”和“组合(说白了new 一个类)”两种方式,当你“调用”一个类的时候就会“自动运行”它的“构造函数”。

5. java构造方法继承问题

对于一个对象, 如果没有定义任何构造函数, 它继承父类的无参构造函数,

但如果一个对象,定义了构造函数, 则,它不会继承父类的无参构造函数,

6. Java 继承和构造方法

Student(java.lang.String name, java.lang.String school);
0 aload_0 [this]
1 aload_1 [name]
2 ldc <String "beijing"> [10]
4 aload_2 [school]
5 invokespecial MyBatis.Student(java.lang.String, java.lang.String, java.lang.String) [12]
8 return
Student(java.lang.String n, java.lang.String l, java.lang.String school);
0 aload_0 [this]
1 aload_1 [n]
2 aload_2 [l]
3 invokespecial MyBatis.Person(java.lang.String, java.lang.String) [20]
6 aload_0 [this]
7 aload_3 [school]
8 putfield MyBatis.Student.school : java.lang.String [22]
11 return
直接查看class文件,我们会发现Student(String name, String school)这个方法调用的是5 invokespecial MyBatis.Student(java.lang.String, java.lang.String, java.lang.String) [12],而在Student(String n,String l,String school) 中调用的是 3 invokespecial MyBatis.Person(java.lang.String, java.lang.String) [20]

7. Java构造方法继承问题

你好,很高兴为你解答。
这段代码提示B的构造函数错误。这是因为B继承A,B的构造函数会自动调用A的默认构造函数(即不带参数的构造函数),但A没有定义默认构造函数,所以就会报错。有两种改法:
1)在A中增加默认构造函数。如下:
class
A
{
int
a;
String
name;
String
sex;
A(){
//修改这儿
}
A(int
a,
String
name,
String
sex)
{
this.a
=
a;
this.name
=
name;
this.sex
=
sex;
}
void
ShowMess()
{
}
}
class
B
extends
A
{
int
age;
B(int
a,
String
name,
String
sex,
int
age)
{
this.a=a;
this.name=name;
this.sex=sex;
this.age=age;
this.age
=
age;
}
void
ShowMess()
{
System.out.println("a+name+sex+age");
}
}
2)修改B的构造函数,显式地调用A的非默认构造函数。如下:
class
A
{
int
a;
String
name;
String
sex;
A(int
a,
String
name,
String
sex)
{
this.a
=
a;
this.name
=
name;
this.sex
=
sex;
}
void
ShowMess()
{
}
}
class
B
extends
A
{
int
age;
B(int
a,
String
name,
String
sex,
int
age)
{
super(a,name,sex);
//修改这儿
this.age
=
age;
}
void
ShowMess()
{
System.out.println("a+name+sex+age");
}
}

8. java-继承/构造方法

9. java中一个子类是否可以继承父类的构造方法

子类可以继承父类的构造方法,并遵循以下原则:

1、子类无条件的继承父类的无参构造方法。

2、子类自身没有定义构造方法,继承父类的无参构造方法,作为构造方法;子类自身定义了无参构造方法。

3、对于父类的含参构造方法,子类可以在自己的构造方法的第一行使用关键字super来调用。
代码如下:

//Fighter.java

class Airplane{
private int speed;
public Airplane(int s) {
speed=s;
System.out.println;
}
}

class Warplane extends Airplane{
public Warplane() {
super(600);
System.out.println;
}
public Warplane(int s) {
super(s);
System.out.println;
}
}

public class Fighter extends Warplane{
public Fighter(){
super();
System.out.println);
}
public Fighter(int s){
super(s);
System.out.println;
}
public static void main(String[] args) {
System.out.println;
Fighter f1=new Fighter();
System.out.println;
Fighter f2=new Fighter(500);
}
}

10. 关于java中子类继承父类的构造方法

java继承中对构造函数是不继承的,只是调用(隐式或显式)。
举例说明:
public class FatherClass {

public FatherClass() {
System.out.println(100);
}
public FatherClass(int age) {
System.out.println(age);
}
}

public class SonClass extends FatherClass{
public SonClass() {
}

public SonClass(int c) {
System.out.println(1234);
}

public static void main(String[] args) {
SonClass s = new SonClass(66);

}
}
编译后执行结果如下:
分析:SonClass s = new SonClass(66);执行这句时,调用
public SonClass(int c) {
System.out.println(1234);//系统会自动先调用父类的无参构造函数(super())
}

在这个构造函数中,等价于
public SonClass(int c) {
super();//必须是第1行,否则不能编译
System.out.println(1234);
}
所以结果是 100 1234
3.如果子类构造函数是这样写的
public SonClass(int c) {
super(22);//必须是第1行,否则不能编译
//显式调用了super后,系统就不再调用无参的super()了;
System.out.println(1234);
}
执行结果是 22
1234
总结1:构造函数不能继承,只是调用而已。
如果父类没有无参构造函数
创建子类时,不能编译,除非在构造函数代码体中第一行,必须是第一行显式调用父类有参构造函数
如下:
SonClass (){
super(777);//显示调用父类有参构造函数
System.out.println(66);
}
如果不显示调用父类有参构造函数,系统会默认调用父类无参构造函数super();
但是父类中没有无参构造函数,那它不是不能调用了。所以编译就无法通过了。
总结2:创建有参构造函数后,系统就不再有默认无参构造函数。
如果没有任何构造函数,系统会默认有一个无参构造函数。

热点内容
linux命令全称 发布:2024-05-17 12:07:54 浏览:110
ftpnas区别 发布:2024-05-17 12:06:18 浏览:949
512g存储芯片价格 发布:2024-05-17 12:04:48 浏览:963
脚本运行周期 发布:2024-05-17 11:39:09 浏览:808
阿里云服务器怎么配置发信功能 发布:2024-05-17 11:37:24 浏览:313
编程中的变量 发布:2024-05-17 11:33:06 浏览:777
加密视频怎么解密 发布:2024-05-17 11:02:52 浏览:571
柳工挖机密码多少合适 发布:2024-05-17 11:00:40 浏览:188
android工程叹号 发布:2024-05-17 10:56:21 浏览:481
在苹果手机应用怎么比安卓贵 发布:2024-05-17 10:56:20 浏览:548