public class TestSuper01 { public static void main(String[ ] args) { new ChildClass().f();//这个改成new ChildClass()为啥没有输出 //TestSuper02里面就能输出 } } class FatherClass { public int value; public void f(){ value = 100; System.out.println ("FatherClass.value="+value); } } class ChildClass extends FatherClass { public int value; public int age; public void f() { super.f(); //调用父类的普通方法 value = 200; System.out.println("ChildClass.value="+value); System.out.println(value); System.out.println(super.value); //调用父类的成员变量 } public void f2() { System.out.println(age); } }
可以啊
Worker类不是应该会自动定义一个无参构造器吗?还是父类定义构造器后会影响到子类自动定义构造器?
老师我想问下这个是什么意思,是新建一个ChildClass对象吗,那为什么不用新建FatherClass对象
首先你要知道老师这节课讲的是什么,老师讲的是继承,而继承就是子类继承了父类,老师这里演示的是调用子类的时候会默认调用到父类的无参构造。
老师我想问下这个表达什么意思
就是创建了一个ChildClass对象并且通过这个对象调用f方法。
TestSuper2 { (String[] args) { System..println()ChildClass02()} } FatherClass02{ fatherClass02{ System..println()} } ChildClass02 FatherClass02{ ChildClass02{ System..println()} }
去掉class
老师我这个测试super()关键字的代码中,在main方法中
new ChildClass().f();
会报错,需要修改为
new FatherClass.ChildClass().f();
然后还会报错。直到把下面的ChildClass类变为静态类才不报错
static class ChildClass extends FatherClass
是我的代码打错误了,还是我的IDEA版本过高,和视频课中老师的版本不一样的原因,还是其他原因呢?求解。
类嵌套了
注意位置
为什么是public int value?
请问public在这是什么作用?
public表示公开的,是一个访问权限,表示在别的地方都可以访问的
package com.itbaizhan.oop; /** * 测试继承树的追溯 */ public class TestSuper02 { public static void main(String[] args) { new ChildClass2(); } class FatherClass2{ public FatherClass2(){ super(); System.out.println("创建FatherClass2"); } } class ChildClass2 extends FatherClass2{ public ChildClass2(){ super();//在一个类中,若是构造方法的第一行没有调用super(...)或者this(...); // 那么Java默认都会调用super(),含义是调用父类的无参数构造方法 System.out.println("创建ChildClass2"); } } }
老师,运行不了,帮忙看下怎么修改,谢谢!
创建不了FatherClass,当前面加个void才不报错但还只显示最先出来的那个
方法名和类名写的不一样的
new ChildClass().f(); 是什么意思啊
new ChildClass()这个叫匿名函数,只能一次,new了一个 ChildClass对象,但是这个对象没有具体的名字,只能使用一次
这个外部可调用的外部指的是什么?
理解为另一个类。
public class TestSuper02 { public static void main(String[] args) { new ChildClass2(); } } class FatherClass2{ static { System.out.println("静态初始化:ChildClass2"); } public FatherClass2(){ System.out.println("创建MotherClass2"); } } class ChildClass2 extends FatherClass { static { System.out.println("静态初始化:ChildClass2"); } public ChildClass2() { System.out.println("创建ChildClass"); } }
第一张图片是我的,第二张是讲课老师的,运行结果不太一样,请问老师我的代码是哪里有问题呢呢。
在子类的构造方法的第一行加上super();
class ChildClass2 extends FatherClass{ static{ System.out.println("静态初始化:ChildClass2"); } public ChildClass2(){ super();//在一个类中,若是构造方法的第一行没有调用super(...)或者this(...); 那么Java默认都会调用super(),含义是调用父类的无参数构造方法。 System.out.println("创建ChildClass"); } }
为啥不输出上面的??是
super
继承之前的FatherClass类吗??可为啥不输出上面的呢
代码发过来我看看
package com.itbaizhan.oop; /** * 继承树的追溯 */ public class TestSuper02 { public static void main(String[] args){ new ChildClass2(); } } class FatherClass2{ static{ System.out.println("静态初始化:FatherClass2"); } public FatherClass2(){ super(); System.out.println("创建FatherClass2"); } } class ChildClass2 extends FatherClass2{ static{ System.out.println("静态初始化:ChildClass2"); } public ChildClass2(){ super();//在一个类中,若是构造方法的第一行没有调用super(...)或者this(...); 那么Java默认都会调用super(),含义是调用父类的无参数构造方法。 System.out.println("创建ChildClass"); } }
这个是有调用的呀,要不你微信找我我给你看看
new ChildClass2();
这个是什么作用呀?
public FatherClass2
这个是创建对象吗?
ChildClass2()
我看这个后面的2不加也不报错,是什么原因呀?
new ChildClass2()是创建对象,不加2也不报错是因为你有一个ChildClass类
为什么不会显示father?,虽然Childrenclass2没继承Fatherclass2,但程序执行前不是优先加载类吗,所以Fatherclass2类中的静态初始化块中的打印father应该会被执行吧?
没有发生继承关系啊