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类 在实际应用中, ...
随机推荐
- 我的Android进阶之旅------>如何将Android源码导入Eclipse中来查看(非常实用)
Android源码下载完成的目录结构如如所示: step1:将.classpath文件拷贝到源代码的根目录 Android源码支持多种IDE,如果是针对APP层做开发的话,建议大家使用Eclipse开 ...
- OutOfMemoryError: Java heap space和GC overhead limit exceeded在Ant的Build.xml中的通用解决方式
这个仅仅是一点点经验,总结一下,当中前两个相应第一个Error.后两个相应第二个Error,假设heap space还不够.能够再改大些. <jvmarg value="-Xms512 ...
- 记一次Net软件逆向的过程(经典)
查壳 1.先看下目录结构: 2.查下,是什么语言 ==> Net的,那不用说了,肯定能破解(毕竟是老本行嘛~) 混淆与反混淆 3.dnSpy打开后发现很多变量是乱码 4.用de4dot跑一波 5 ...
- urllib2下载网页的三种方法
1.最直接的方法 #-*- coding: utf-8 -*- import urllib2 #直接请求 response = urllib2.urlopen('https://www.baidu.c ...
- 两个小例子彻底明白python decorator
一:没有什么实际意思,就是单纯的理解decorator.使用装饰器完全可以阻止方法中的代码执行. class json_test(object): def __init__(self, *arg, * ...
- 回忆基础:制作plist文件
-(void)creatPlistFileWithArr:(NSArray *)array{ //将字典保存到document文件->获取appdocument路径 NSString *docP ...
- leetcode 1049 Last Stone Weight II(最后一块石头的重量 II)
有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == y,那么 ...
- STM32 HAL SPI读取MPU6500的设备ID异常
1.问题背景 近前,使用STM32F4 HAL库的SPI读取MPU6500出现异常. 现象:读取ID失败,返回0,以为硬件焊接问题,各种排查,最后为了示波器测试方便,把读取ID的函数放到While(1 ...
- android 电池(二):android关机充电流程、充电画面显示【转】
本文转载自:http://blog.csdn.net/xubin341719/article/details/8498580 上一篇我们讲了锂电池的充放电的流程和电池的一些特性,这一节我们重点说一下a ...
- Win7_自动播放
1.gpedit.msc(组策略)--.> 本地组策略编辑器 --> 展开“计算机配置→管理模板→所有设置” --> 右侧窗口"关闭自动播放" 2. 3.