Java基础00-继承17
1. 继承
1.1 继承概述

但是我们将相同的类提取出来就会变成这个样子

让他们之间产生一个继承的关系



1.2 继承的好处和弊端

苹果是水果的一种可以使用继承
猫是动物的一种可以使用继承
猫和狗不具备继承关系,不可以使用继承
1.3 继承中遍变量的访问特点

1.4 super

1.5 继承中构造构造方法的访问特点
子类中所有的构造方法默认都会访问父类中无参的构造方法。
每一个子类构造方法的第一条语句默认都是super()。

1.6 继承中成员方法的访问特点

1.7 super内存图
main方法加载到栈内存

Zi z 加载到main方法中

在堆内存中new一片空间,加载成员变量,Zi z指向001。

将Zi方法加载到栈内存中,然后执行Zi的构造方法,但是执行子类构造方法的时候默认方法中是带super()方法的,所以要先访问父类的构造方法。


父类,先将父类的成员变量(它是子类的父类所以它的地址也是001)加载到堆内存空间,然后将父类的构造方法加载到栈内存,执行构造方法,输出,执行完毕后从栈内存消失。

父类的构造方法访问完毕后,接着访问子类的构造方法,输出,然后在栈内存中消失。

接着是z.show(),调用show()方法,在栈内存中加载show,调用者是z(001),this就是z(001)

int age = 30;.,在栈内存加载。

直接输出age

这次输出的是this.age,而this的地址值是001,所以输出的是20

super.age,同过调用者找到super(父类),从super(父类)找到age,所以输出40。show方法执行完毕从扎内存消失。

接着调用method();方法,但是在子类中并没有。

子类没有method方法,所以我们到父类中找,父类中有method()方法最所以我们调用父类的method方法。
所以执行的是父类的method方法,输出完毕后在栈内存中消失。

1.8 方法重写
方法形参不变,返回值类型可不同(<=小于父类)

1.9 方法重写注意事项
private、final修饰的方法不能被重写。

1.10 Java中继承的注意事项

1.11 案例
1.11.1 老师和学生

public class Person {
public String name;
public int age;
public Person(){
System.out.println("父类的构造方法被调用");
}
}
public class Student extends Person{
public Student(){
super();
System.out.println("Student的构造方法被调用");
}
public void study(){
System.out.println("好好学习");
}
}
public class Teacher extends Person{
public Teacher(){
super();
System.out.println("Teacher的构造方法被调用");
}
public void teach(){
System.out.println("好好教书");
}
}
public class TestTeaStu {
public static void main(String[] args) {
Teacher t = new Teacher();//父类的构造方法被调用
//Teacher的构造方法被调用
Student s = new Student();//父类的构造方法被调用
//Student的构造方法被调用
t.teach();//好好教书
s.study();//好好学习
}
}
1.11.2 猫和狗

public class Animals {
private String name;
private int age;
public Animals(){
System.out.println("Animals类的无参构造方法被调用");
}
public Animals(String name,int age){
System.out.println("Animals类的有参构造方法被调用");
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
}
public class Cat extends Animals {
public Cat(){
super();
System.out.println("Cat类的无参构造方法被调用");
}
public Cat(String name,int age){
super(name,age);
System.out.println("Cat类的有参构造方法被调用");
}
public void getMouse(){
System.out.println("猫抓老鼠");
}
public String toString(){
return "猫的字符串";
}
}
public class Dog extends Animals {
public Dog(){
super();
System.out.println("Dog类的无参构造方法被调用");
}
public Dog(String name,int age){
super(name,age);
System.out.println("Dog类的有参构造方法被调用");
}
public void lookGuard(){
System.out.println("狗看门");
}
}
public class AnimalDemo{
public static void main(String[] args) {
//输出:Animals类的无参构造方法被调用 Cat类的无参构造方法被调用
Cat c = new Cat();
//Animals类的有参构造方法被调用
//Dog类的有参构造方法被调用
//输出:Animals类的有参构造方法被调用 Dog类的有参构造方法被调用
Dog d = new Dog("ag",13);
c.getMouse();//输出:猫抓老鼠
d.lookGuard();//输出:狗看门
}
}
Java基础00-继承17的更多相关文章
- 第二十八节:Java基础-进阶继承,抽象类,接口
前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...
- Java基础学习-- 继承 的简单总结
代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...
- Java基础(00)
Java发展史 Java之父:詹姆斯.高斯林(James Gosling). SUN(Stanford University Network 斯坦福大学网络公司)产物. 1995年5月23日,java ...
- java基础之继承(一)
虽然说java中的面向对象的概念不多,但是具体的细节还是值得大家学习研究,java中的继承实际上就是子类拥有父类所有的内容(除私有信息外),并对其进行扩展.下面是我的笔记,主要包含以下一些内容点: 构 ...
- 【Java基础】继承的一些总结
什么是继承 把一些类的具有共性的东西剥离出来形成一个新的类,然后各个其他类保留自己独有的特性,并用关键字extends继承这个剥离出来的新的类,可以最终达到各类原始相同效果,但是在每个类中,单用一个“ ...
- Java基础08 继承
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 继承(inheritance)是面向对象的重要概念.继承是除组合(composit ...
- Java基础08 继承(转载)
继承(inheritance)是面向对象的重要概念.继承是除组合(composition)之外,提高代码重复可用性(reusibility)的另一种重要方式.组合是重复调用对象的功能接口.继承可以重复 ...
- java基础(10):继承、抽象类
1. 继承 1.1 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系.例如公司中的研发部员工和维护部员工 ...
- Java基础 之三 继承
1.子类 1) 定义子类 //假设父类(也叫做超类)是Employee类,用extends来表示继承 public class Manager extends Employee{ //域和方法 pri ...
- Java基础进阶:继承重点摘要,继承详解,方法重写注意事项,方法重载与重写的区别,抽象类,代码块, 附重难点,代码实现源码,课堂笔记,课后扩展及答案
继承重点摘要 *继承的特点: 子类在初始化之前,一定要先完成父类数据的初始化 子类在初始化之前,一定要先访问父类构造,完成父类数据的初始化 系统在每一个构造方法中默认隐藏了一句super(); 如果我 ...
随机推荐
- springboot 非端口模式启动
@SpringBootApplication @ComponentScan(basePackages = {"demo.test"}) public class ReportApp ...
- A100计算能力
A100计算能力 A100 GPU支持新的计算功能8.0.表1比较了NVIDIA GPU架构的不同计算功能的参数. 表1.计算能力:GP100 vs. GV100 vs. GA100. MIG架构 尽 ...
- mybatis入门案例——IDEA版
环境:IDEA2017,jdk1.8.0,maven3.5.2 步骤: 1.创建一个普通Maven工程,删掉src目录,再创建一个maveb的model命名为mybatis-01 2.配置 pom.x ...
- 【NX二次开发】Block UI 指定轴
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- 利用 Bean Validation 来简化接口请求参数校验
团队新来了个校招实习生静静,相互交流后发现竟然是我母校同实验室的小学妹,小学妹很热情地认下了我这个失散多年的大湿哥,后来... 小学妹:大湿哥,咱们项目里的 Controller 怎么都看不到参数校验 ...
- 使用VS code编写C++无法实时检测代码的解决办法
更新:其实微软是有官方文档配置VS code 的C++的.地址是: https://code.visualstudio.com/docs/cpp 更改工作区后就发现不能再使用VS CODE愉快地写C+ ...
- 【dp】动归总结
原标题:[DP专辑]ACM动态规划总结 转载自 http://blog.csdn.net/cc_again?viewmode=list http://blog.csdn.net/cc_again/ar ...
- [202103] Interview Summary
整理 2021 March「偷」到的算法题. 题目: 阿里:https://codeforces.com/contest/1465/problem/C 字节:输出 LCS Jump Trading:给 ...
- golang 写文件--详细解释
1,不覆盖指定的文件 先看代码怎么写,下面再具体解释. func writeToFile(msg string) { f, err := os.OpenFile("/home/mingbai ...
- 微信获取信息发生错误(两个access_token的区别),错误代码:40001,说明:invalid credential, access_token is invalid or not latest hints
微信有两个access_token,一个是基础access_token,一个是网页授权access_token. 想要获取不带unionid的用户信息(以下链接)使用基础access_token ht ...