JAVA 学习模块十一: 继承
2016-09-06 22:24
211 查看
基本形式和概念
继承的具体使用
一个对象实例化的过程
1.基本形式和概念
/* 优点: 1.提高了代码的复用性 2.让类与类之间产生了关系,给第三个特征多态提供了前提 java 中支持单继承,不直接支持多继承,但对c++中的多继承机制进行了改良 单继承: 一个子类只有一个直接父类 多继承: 一个子类可以有多个直接父类(Java中不允许) 不支持是因为多个父类中有相同成员,会产生调用不确定性 java 支持多层(重)继承: c继承b ,b继承a 就会出现继承体系 当要使用一个继承体系时: 1.查看该体系中的顶层类,了解该体系的基本功能 2.创建体系中的最子类的对象,完成功能的使用。 什么时候定义继承: 当类与类之间有所属关系时,就定义继承。 */ class Peeson { String name; int age; } class Student extends Person //继承 { // String name; // int age; void study() { System.out.println(name +"st"); } } class Worker { String name; int age; void work() { System.out.println(name+ "wo"); } } class Extend { public static void main(String[] args) { Student s = new Student(); s.name = "zhangsan"; s.age=20; s.student(); } }
2.继承的具体使用
/* 在子父类中。成员的特点体现。 1.成员函数 2.成员变量 3.构造函数 */ /* 当本类的成员和局部变量同名用this区分。 当子父类的成员变量同名用super区分父类。 this和super用法很相似:关键字 区别: this 代表一个本类对象的引用 super: 代表一个父类的空间 */ //成员变量 class Fu { private int num1 = 4; public int getNum() { return num1; } } class Zi extends Fu { // int num2 = 5; int num1 = 4; void show() { System.out.println(this.num1+"..."+super.getNum()); } } class ExtendDemo { public static void main(String[] args) { Zi z = new Zi(); z.show(); } } //成员函数 /* 当子父类中出现成员函数一模一样的情况,会运行子类的函数。 这种现象称为覆盖操作。这是函数在子父类中的特性。 函数两个特性:1.重载(同一个类中)/重写/覆写 2. 覆盖(子类中) 覆盖注意事项: 1.子类覆盖父类方法时,子类权限必须大于等于父类权限。(public private修饰的不可覆盖) 2.静态只能覆盖静态或者被静态覆盖。 什么时候使用覆盖: */ class Fu1 { void show1() { System.out.println("fu show run"); } } class Zi extends Fu { void show1() { System.out.println("zi show run"); } } class ExtendsDemo3 { public static void main(String[] args) { Zi z = new Zi(); z.show1(); z.show2(); } } /* 什么时候使用覆盖: 当对一个类进行子类的扩展时,子类需要保留父类的功能声明。 但是要定义子类中标特有的功能时,就要用覆盖操作完成。 */ class Phone { void show() { System.out.println("number"); } } class NewPhone extends Phone { void show() { System.out.println("name"); // System.out.println("number"); super.show(); } } /*子父类中的构造函数的特点 在子类构造对象时,发现在访问子类构造函数时,父类也就运行了。 原因是: 在子类的构造函数中第一行有个默认的隐式语句。super() 构造函数不可覆盖,不可继承 为什么子类实例化的时候要访问父类中的构造函数: 那是因为子类继承了父类,获取到了父类中的内容(属性),所以在使用父类内容之前,要先看父类是如何对自己的 内容进行初始化的。所以子类在完成构造函数时,必须访问父类中的构造函数。 为了完成必须的动作,就在子类构造函数中加了 super()语句。 如果父类中没有定义空参数构造函数,那么子类的构造函数,必须用super明确调用父类中的那个构造函数。 同时子类构造函数中如果使用了this调用了本类构造函数时,那么super 就没有了因为 super 和 this 都只能定义在第一行,所以只能有一个。但是可以保证的是,子类中肯定会有其他的构造函数访问父类的构造函数(构造函数可以有多个)。、 注意:super语句必须要定义在子类构造函数的第一行。因为父类的初始化动作要先完成。 */ class Fu1 { Fu() { System.out.println("zi show run"); } } class Zi extends Fu { Zi() { //super(); 调用的就是父类中的空参数的调用涵数。 //如果不是空参,那么就用 super(参数) 的形式 System.out.println("zi show run"); } } class ExtendsDemo4 { public static void main(String[] args) { new Zi(); } }
3.一个对象实例化的过程
/* 一个对象实例化的过程 Person p = new Person(); 1. jvm 会读取指定的路径下的 Person.class 文件,并加载进内存,并会 先加载 Person 的父类(如果有父类的情况下) 2.在堆内存中开辟空间,分配地址 3.并在对象空间中,对对象中的属性进行默认初始化。 4.调用对应的构造函数进行初始化 5.在构造函数中,第一行会先调用父类中的构造函数进行初始化 6.父类初始化完毕后,再对子类的属性进行显示初始化 7.再进行子类构造函数的特定初始化 8.初始化完毕后,将地址值付给引用变量 9. */
相关文章推荐
- JAVA 学习模块十二: Final 关键字 以及 继承(下)
- JAVA学习笔记之七继承和多态
- JAVA学习心得--继承、接口与泛型
- perl学习笔记十一-----模块
- java学习 --接口的多重继承
- java学习 --接口的多重继承
- Java开发学习笔记之十一:开始JSP之旅
- java学习笔记十一——对象转型
- 关于张老师java视频的学习(十一)
- Java学习笔记---13.面向对象编程08-Java中继承的概念,子类实例化过程,super()及方法复写
- java 学习 私有类实现接口 ,一个类继承来的方法和接口实现方法重复第八天
- Java 学习笔记 (3) -抽象类 abstract 接口 interface 内部类 inner class 继承 extends 实现 implements 包 package
- JAVA学习【知】继承
- 编程经验系列-Java学习杂谈(十一)--Spring
- Java基础学习笔记(十一)I/O 文件访问
- 学习JAVA继承关系很好的例子
- java学习笔记5:对象继承upcasting
- java学习笔记---第五章继承
- java学习 java 的继承机制 暑假第三天
- java学习笔记七——继承