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(); 如果我 ...
随机推荐
- .net core 使用阿里云分布式日志
前言 好久没有出来夸白了,今天教大家简单的使用阿里云分布式日志,来存储日志,没有阿里云账号的,可以免费注册一个 开通阿里云分布式日志(有一定的免费额度,个人测试学习完全没问题的,香) 阿里云日志地址: ...
- Volatile 原理及使用,java并发中的可见性问题
1.解决并发编程中的可见性问题 volatile 代表不使用cpu缓存,修改后的数据,将直接刷到内存中,被volatile修饰的变量,读取的时候,也是从内存中读取,不从cpu缓存中读取 上代码 // ...
- TVM性能评估分析(一)
TVM性能评估分析(一) System Overview AutoTVM vs Auto-scheduler Table 1. Workflow Comparision Figure 1. Searc ...
- 使用Relay部署编译ONNX模型
使用Relay部署编译ONNX模型 本文介绍如何使用Relay部署ONNX模型的入门. 首先,必须安装ONNX软件包. 一个快速的解决方案是安装protobuf编译器,然后 pip install o ...
- 深入理解java虚拟机笔记Chapter2
java虚拟机运行时数据区 首先获取一个直观的认识: 程序计数器 线程私有.各条线程之间计数器互不影响,独立存储. 当前线程所执行的字节码行号指示器.字节码解释器工作时通过改变这个计数器值选取下一条需 ...
- DOS命令行(5)——Windows系统的配置与管理(下)
whoami --查看当前有效用户 这个工具可以用来获取本地系统上当前用户(访问令牌)的用户名和组信息,以及相应的安全标识符(SID).声明.本地系统上当前用户的权限.登录标识符(登录 ID).例如, ...
- 记Aspose.Word的使用中出现的问题
最近实现一个功能,具体需求就是把数据库中的内容转换成word文档,文档中需要包含标题.目录以及表格信息. 这里我使用的是Aspose.Word类,这是一个很强大的文档操作工具包,实现了所有操作文档的所 ...
- Vue项目的开发流程
我先安装的node.js 1.确认已安装了node.js,可在cmd中输入( node -v和npm -v),如显示出版号,说明安装成功 2.安装webpack 和webpack-cli 在全局下安装 ...
- 上海某大公司:你是了解Redis对吧?
<对线面试官>系列目前已经连载26篇啦!有深度风趣的系列! [对线面试官]Java注解 [对线面试官]Java泛型 [对线面试官] Java NIO [对线面试官]Java反射 & ...
- Gitlab 定时备份
要求 1.为了能够备份和恢复,请确保你的系统上安装了Rsync #Debian/Ubauntu sudo apt-get install rsync # RHEL/Centos sudo yum in ...