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 优雅的启动类
优雅的sprongboot启动类 package fama.cost.server; import fama.cost.common.IStoppable; import fama.cost.comm ...
- “ compiler-rt”运行时runtime库
" compiler-rt"运行时runtime库 编译器-rt项目包括: Builtins-一个简单的库,提供了代码生成和其他运行时runtime组件所需的特定于目标的低级接口. ...
- 【NX二次开发】根据视图名称旋转视图,在布局中替换视图uc6464
uc6464("布局名","旧视图名","新视图名");输入布局名.旧视图名.新视图名.如果布局名为空则更新当前布局.如果旧视图名为空,则工 ...
- 【NX二次开发】查找部件中的对象 UF_OBJ_cycle_objs_in_part
返回所有层上指定类型部件中的所有对象,不管它们的当前显示状态如何.这个例程不返回表达式.指定对象.临时(系统创建的)对象或休眠对象.休眠对象指的是从模型中删除的对象例如,如果你混合了一条边,那么这条边 ...
- 设置NX欢迎界面
环境变量 变量名:UGII_WELCOME_PAGE 变量值:http://www.baidu.com/
- (Element UI 组件 Table)去除单元格底部的横线
Element UI 组件 Table 有一个属性 border,添加它可以增加纵向边框,但是无法控制横线边框,因此即使是最简单的 el-table,也会包含一个底部横线. 这个底部横线其实是一个 b ...
- explicit 关键字 禁止隐式转换
explicit可以抑制内置类型隐式转换,所以在类的构造函数中,使用explicit关键字,防止不必要的隐式转换
- 38、linux中软件的安装方法
38.1.rpm安装: rpm -ivh 包名# i:安装的软件: v:显示正在安装的软件信息: h:显示安装软件的进度: rpm -ql 包名 #查看安装包里的文件: rpm -qa 包名#查询包是 ...
- SPF Tarjan算法求无向图割点(关节点)入门题
SPF 题目抽象,给出一个连通图的一些边,求关节点.以及每个关节点分出的连通分量的个数 邻接矩阵只要16ms,而邻接表却要32ms, 花费了大量的时间在加边上. // time 16ms 1 ...
- Vue 动态参数
v-on和v-bind可以动态绑定一个参数,用[]来绑定一个可以改变的值. <li v-on:[event]="print"></li> <scrip ...