当前位置: 首页 > news >正文

Java中继承的规则

一、子类中对父类构造函数的调用规则

1、如果不显式指定,子类中的构造函数会默认调用父类中的无参构造

测试代码

package day07;

import java.sql.Date;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT;

class Parent{

    private String name;

    private int age; 

    public Parent(){

              System.out.println("Person()");

    } 

    public Parent(String name){

              System.out.println("Person(String name)");

              this.setName(name);

    } 

    public Parent(String name, int age){

              System.out.println("Person(String name, int age)");

              this.setName(name);

              this.setAge(age);

    } 

    public void setName(String name){

              this.name = name;

    } 

    public void setAge(int age){

              this.age = age;

    }

}



class Child extends Parent{



    public Child(){

              System.out.println("Child()");

    } 

    public Child(String name){

              System.out.println("Child(String name)");

    } 

    public Child(String name, int age){

              System.out.println("Child(String name, int age)");

    }

}



public class StaticKey{

    public static void main(String args[]){

              Child c1 = new Child();

              Child c2 = new Child("张三");

              Child c3 = new Child("张三", 15);

    }

}

 

输出

 Person()  

 Child()
 Person()
 Child(String name)
 Person()
 Child(String name, int age)

 

如果此时父类中没有无参构造,则编译会报错,如:

上面的代码编译时会出现如下错误提示:

ExtendsDemo.java:13: 错误: 无法将类 Parent中的构造器 Parent应用到给定类型;
        public Child(){
                      ^
  需要: String,int
  找到: 没有参数
  原因: 实际参数列表和形式参数列表长度不同
1 个错误

 

2、如果父类中有多个构造函数,可以使用“super(参数列表)”的格式显式地调用父类中指定构造函数,如上述代码在Child类中做如下修改后就可以消除上面的编译错误。

class Child extends Parent{

         public Child(){

             super("bing", 30);

             System.out.println("Child()");

         }

}

 

二、子类中对父类函数的覆写规则

1、子类覆写父类中的函数时,访问权限只能扩大,不能减小

2、父类中private权限的函数无法被子类覆写

 

测试代码:

class Parent{

         public void print(){

                   System.out.println("Parent: print()");

         } 

         public void fun(){

                   this.print();

         }

}

 

class Child extends Parent{

         public void print(){

                   System.out.println("Child: print()");

         }

}

 

public class ExtendsDemo01{

         public static void main(String args[]){

                   Child c1 = new Child();

                   c1.print();

                   c1.fun();

         }

}

 

 

分别将Parent类中的print()方法的权限修改为private、default和public,然后在Child类中进行覆写,输出结果如下表所示。

------------------------------------------

父类         子类           输出

------------------------------------------

private      default        Child: print()

                                Parent: print() 

private      public         Child: print()

                                Parent: print() 

default      default        Child: print()

                                Child: print() 

default      public         Child: print()

                                Child: print()

public       public          Child: print()

                                Child: print()

------------------------------------------

转载于:https://www.cnblogs.com/mmlovejj/p/5062591.html

相关文章:

  • ExpandableListView(二级ListView)的使用
  • EventFiringWebDriver网页事件监听(一)
  • 为您的Android,iOS等应用加入声波传输功能
  • virtualbox测试k8s要注意的情况
  • 操蛋的面试题(更新)
  • 深入剖析Java中的装箱和拆箱
  • 跨平台应用——Qt VS HTML5(上)
  • Python学习之路(2017.7.15)
  • MySQL中文全文检索
  • http和scoket通信的区别
  • 使用Anaconda搭建TensorFlow-GPU环境
  • 启动Oracle时提示“ORA-00600: internal error code, argume
  • TextInputLayout 和 TextInputEditText 的简单介绍以及使用
  • golang开发环境配置及Beego框架安装
  • 面向对象编程(十二)——final关键字
  • [NodeJS] 关于Buffer
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • CentOS7简单部署NFS
  • Java多态
  • linux学习笔记
  • SAP云平台里Global Account和Sub Account的关系
  • SegmentFault 2015 Top Rank
  • underscore源码剖析之整体架构
  • Vue2.0 实现互斥
  • 安装python包到指定虚拟环境
  • 闭包,sync使用细节
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 三栏布局总结
  • 深度学习在携程攻略社区的应用
  • 我是如何设计 Upload 上传组件的
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • ​VRRP 虚拟路由冗余协议(华为)
  • #Z2294. 打印树的直径
  • $().each和$.each的区别
  • (ibm)Java 语言的 XPath API
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (规划)24届春招和25届暑假实习路线准备规划
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .Net Core与存储过程(一)
  • .NET 反射 Reflect
  • .NET基础篇——反射的奥妙
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • ??eclipse的安装配置问题!??
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @JSONField或@JsonProperty注解使用
  • [.net]官方水晶报表的使用以演示下载
  • [20171101]rman to destination.txt
  • [2023年]-hadoop面试真题(一)
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [AHOI2009]中国象棋 DP,递推,组合数