博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动手动脑
阅读量:5060 次
发布时间:2019-06-12

本文共 1960 字,大约阅读时间需要 6 分钟。

package 作业1;

    
class Grandparent
{
    public Grandparent()
     {
            System.out.println("GrandParent Created.");
    
}
    public Grandparent(String string)
    {
            System.out.println("GrandParent Created.String:" + string);
    
 }
}
class Parent extends Grandparent
{
    public Parent()
     {
            //super("Hello.Grandparent.");
            System.out.println("Parent Created");
    
       // super("Hello.Grandparent.");
      }
}
class Child extends Parent
{
    public Child()
     {
    
        System.out.println("Child Created");
      }
}
public class TestInherits
{
    public static void main(String args[])
     {
            Child c = new Child();
    运行结果:

运行子类的构造函数会先执行父类的构造函数。若将//super("Hello.Grandparent.");前//去掉之后运行就结果就会变成:

 

有了super()语句会执行其调用的构造函数,若将其放在第二行,则会报错

(构造函数调用必须是构造函数中的第一个语句)这是显示的错误。

总结:通过 super 调用父类构造方法,必须是子类构造方法中的第一个语句。若父类中同时存在有参构造函数和无参构造函数,若子类构造函数什么也没写则默认调用无参构造函数,若加上super(),则根据super()来确定,若父类只有有参构造函数,则必须在写子类构造函数时加上super();

 

 

 

请自行编写代码测试以下特性(动手动脑): 在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。

package 作业1;

 class TEXT {
    public void print() {
        System.out.println("我是爸爸");        
    }
}
class Son extends TEXT{
    public void print() {
     System.out.println("我是儿子");
    }
    
     public void Fuprint(){
         super.print();
    }
}
public class DSDN {
public static void main(String[] args) {
Son s=new Son();
s.Fuprint();
}
}

运行结果:

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=1;
    public void printValue() {
        System.out.println("Parent.printValue(),myValue="+myValue);
    }
}
class Child extends Parent{
    public int myValue=2;
    public void printValue() {
        System.out.println("Child.printValue(),myValue="+myValue);
    }

运行结果:

先定义了一个父类对象以及子类变量,输出就显示出来第一二句,然后用children对象给parent对象赋值,parent对象的myValue变为2;parent函数printvalue也被覆盖,于是就有了第三句,value++是先输出再加一,于是输出第四句,然后强转输出,这是value已经是3,先输出在加一有了第五句。

 

转载于:https://www.cnblogs.com/2205254761qq/p/9926188.html

你可能感兴趣的文章
java string(转)
查看>>
__all__有趣的属性
查看>>
写博客
查看>>
利用循环播放dataurl的视频来防止锁屏:NoSleep.js
查看>>
python3 生成器与迭代器
查看>>
java编写提升性能的代码
查看>>
ios封装静态库技巧两则
查看>>
Educational Codeforces Round 46 (Rated for Div. 2)
查看>>
Abstract Factory Pattern
查看>>
C# 实现Bresenham算法(vs2010)
查看>>
基于iSCSI的SQL Server 2012群集测试(一)--SQL群集安装
查看>>
list 容器 排序函数.xml
查看>>
存储开头结尾使用begin tran,rollback tran作用?
查看>>
Activity启动过程中获取组件宽高的五种方式
查看>>
java导出Excel表格简单的方法
查看>>
SQLite数据库简介
查看>>
利用堆实现堆排序&优先队列
查看>>
Mono源码学习笔记:Console类(四)
查看>>
Android学习路线(十二)Activity生命周期——启动一个Activity
查看>>
《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》
查看>>