62,621
社区成员
发帖
与我相关
我的任务
分享
class A{
class A_A{
}
}
class B extends A.A_A{
public B(A a){
//首先 B的父类 是 A_A它是 A的 内部类(并且是非静态的)
//非static内部类 需要 它的外部类对象 通过 .new 语法来创建
//首先 我们在new B 对象时 编译器会自动为我们先创建 它的父类对象
//也就是 A_A 的对象 但是 A_A对象必须要通过 它的外部类对象
//也就是 A 的对象 .new 创建 和它动态的关联起来
//你现在 继承A_A 编译器 怎么知道它跟哪个 外部类对象 关联呢?
//所以要通过 特殊的语法 构造器里传进来的参数 就是 与之动态关联的
a.super();//这个 绝对不是什么调用 父类的构造器 super();才是调用父类的构造器 这只是特殊的语//法表示 B的父类对象与a 动态关联起来
}
public B(){
// new A().super 11楼说的这种语法 我没有试过 不过应该也能行吧 原理是一样的
}
public static void main(String[] args){
new B(new A());
//楼主 应该先好好理解 内部类 然后再回头 想想 继承 内部类 就很清楚这样的语法了
//haojia0716 已经说的很清楚了
}
}
class A {
A() {
System.out.println("A被构造");
}
class B {
B() {
System.out.println("B被构造");
}
}
}
class C extends A.B {
C(A a) {
a.super();
System.out.println("C被构造");
}
public static void main(String[] args) {
A a = new A();
new C(a);
}
}
class C extends A.B {
C() {
new A().super();
System.out.println("C被构造");
}
public static void main(String[] args) {
A a = new A();
new C();
}
}
class A //定义一个类
{ class B //注意这个类是在A内部的一个类,相当于是在类A中定义了一种数据类型,它的作用范围只在A的类体中
{
}
}
class C extends A.B //A.B表示它继承的是A类中的一个局部类B,跟调用类的属性是一样的道理
{
C(A a)//构造方法输入参数是类A的对象
{
a.super();//super 就是代表父类,你调用父类的构造方法格式应该是a.super()
}
public static void main(String[] args)
{
A a=new A(); //创建类A的一个对象a
C(a); //这里有语法错误,因为构造方法是创建类的对象时使用的
}
}
class A
{ class B {}
}
class C extends A.B
{
C(A a)
{
a.super();
}
public static void main(String[] args)
{
A a=new A();
}
}