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()
------------------------------------------
Java中继承的规则的更多相关文章
- Java中继承,类的高级概念的知识点
1. 继承含义 在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance). 2. 继承的优点 A.代码的可重用性 B.子类可以扩 ...
- java中继承thread类的其他类的start()方法与run()方法
java中继承thread或者实现runnable接口的类必须重写run()方法. 如果其执行了start()方法,其实就是启动了线程的run()方法. 注意:如果是实现runnable接口的类是没有 ...
- java中继承,子类是否继承父类的构造函数
java中继承,子类是否继承父类的构造函数 java继承中子类是不会继承父类的构造函数的,只是必须调用(隐式或者显式) 下面来看例子: public class TestExtends { publi ...
- [转载]Java中继承、装饰者模式和代理模式的区别
[转载]Java中继承.装饰者模式和代理模式的区别 这是我在学Java Web时穿插学习Java设计模式的笔记 我就不转载原文了,直接指路好了: 装饰者模式和继承的区别: https://blog.c ...
- [转]Java中继承、多态、重载和重写介绍
什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...
- Java中继承thread类与实现Runnable接口的区别
Java中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2. 通过实现Runnable接口,实例化Thread类 在实际应用中, ...
- c++中继承和java中继承的对比
java中: class Parent{ public void test(int a){ System.out.println("Parent:" + a); System.ou ...
- Java基础知识强化之多线程笔记05:Java中继承thread类 与 实现Runnable接口的区别
1. Java中线程的创建有两种方式: (1)通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中. (2)通过实现Runnable接口,实例化Thread类. 2. ...
- [转] Java中继承thread类与实现Runnable接口的区别
Java中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2. 通过实现Runnable接口,实例化Thread类 在实际应用中, ...
随机推荐
- Redis高级进阶(一)
一.redis中的事务 在关系型数据库中事务是必不可少的一个核心功能,生活中也是处处可见,比如我们去银行转账,首先需要将A账户的钱划走,然后存到B账户上,这两个步骤必须在同一事务中,要么都执行,要么都 ...
- 0420模块 序列化模块 hashlib模块
复习:内置方法 __len__ len(obj)的结果依赖于obj.__len__()的结果,计算对象的长度__hash__ hash(obj)的结果依赖于obj.__hash__()的结果,计算对象 ...
- poj 3278 Catch That Cow-搜索进阶-暑假集训
Catch That Cow Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Subm ...
- codevs1997 守卫者的挑战
题目描述 Description 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突 然,眼前一道亮光闪过.“我,Nizem,是黑魔法圣殿的守卫者. ...
- LightOJ 1138 二分
1138 - Trailing Zeroes (III) PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: ...
- spring学习(3)
bean的声明周期 为什么把生命周期当做一个重点? Servlet->servlet生命周期 Servlet生命周期分为三个阶段: 1:初始化阶段,调用init()方法 2:响应客户请求阶段,调 ...
- PHP中有多态么
PHP中有多态么 一.总结 一句话总结:封装是类的构建过程,php具有:php也具有继承的特性.唯独这个多态,php体现的十分模糊.原因是php是弱类型语言. php不具有像java那种清晰的多态,不 ...
- 12 Python 函数
初识函数定义与调用 定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":". def 是固定的,不能变,必须是连续的def三个字母,不能分开...它们要相亲相 ...
- JavaUtil_08_StringUtil_commons-lang3 之 StringUtils
二.参考资料 1.[commons]字符串工具类——commons-lang3之StringUtils
- hdu--2111--Saving HDU(贪心)
#include<iostream> #include<vector> #include<algorithm> using namespace std; struc ...