动手动脑4

本文深入探讨Java中的继承机制,包括基类构造函数的调用顺序,super关键字的使用,以及多态特性如何通过方法重写实现。通过具体代码示例,展示了不同类之间的方法调用过程和对象初始化流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)继承中基类构造函数的调用:
源代码:

 

public class a {
public a()
{
System.out.println("a的构造方法被调用");
}
}
public class b extends a{
public b()
{
super();
System.out.println("b的构造方法被调用");
}
}
public class c extends b{
public c()
{
System.out.println("c的构造方法被调用");
}
}
public class m {

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
c child=new c();
}
}

 

构造函数的作用是用来初始化,当对子类的对象进行初始化时一定会需要对其继承的基类的所有字段等进行初始化,在进行对子类的对象进行初始化之前会调用基类的构造函数,并且按照继承顺序依次调用。


运行结果:


(2)源代码

public class main {
/**
* @param args
*/
public String toString()
{
return "ok";
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
main a=new main();
System.out.println("a=" + a);
}
}

 


“+”号运算会调用其toString()方法,默认情况下,此方法返回“类名 @ + hashCode”。子类可以重写toString()方法。

截图:

(3)super关键字

源代码

public class a {
    public void way()
    {
        System.out.println("父类的way方法被调用");
    }

}
public class b extends a{
    public void way()
    {
        super.way();
        System.out.println("子类的way方法被调用");
    }

}
public class c {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        b k=new b();
        k.way();
    }
}

  运行结果

(4)

 

 源代码:

public class mammal {}
public class dog extends mammal {}
public class cat extends mammal {}
public class m {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        mammal i=null;
        dog j=new dog();
        cat k=new cat();
        i=j;
         j=i;
         j=(dog)i;
         j=k;
         k=(cat)i;
    }
}

  (5)源代码

public class ParentChildTest {
    public static void main(String[] args) {
        Parent parent=new Parent();
        parent.printValue();
        Child child=new Child();
        child.printValue();
        
        parent=child;
        parent.printValue();
        
        parent.myValue++;
        parent.printValue();
        
        ((Child)parent).myValue++;
        parent.printValue();
        
    }
}

class Parent{
    public int myValue=100;
    public void printValue() {
        System.out.println("Parent.printValue(),myValue="+myValue);
    }
}
class Child extends Parent{
    public int myValue=200;
    public void printValue() {
        System.out.println("Child.printValue(),myValue="+myValue);
    }
}

 

转载于:https://www.cnblogs.com/xuange1/p/9926151.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值