Java入门_学习笔记[4]_继承
来源:互联网 发布:淘宝大数据 实体店 编辑:程序博客网 时间:2024/06/15 17:25
Java基础—继承(inheritance)
1、继承关键字:extends
2、继承定义格式:
class subclass/derivedclass/childcalss extends parentclass/baseclass/superclass{ methods and domain;}
Java中继承全部都是公有继承,没有C++中私有继承和保护继承。
3、调用超类的方法的关键字:super
super.getSalary();
(1)实现子类通过父类中的访问器方法访问超类中的私有域。(2)但super与this不同,它不是一个对象的引用,所以不能赋值给另一对象变量,仅仅是一个指示编译器调用超类方法的特殊关键字。(3)在子类的构造类中,也需要使用super()来显示调用父类的构造器进行初始化。这也是第二种作用。(4)而this两个用途是:引用隐式参数,调用该类其他的constructor。
3、多态(polymorphism)+动态绑定(dynamic binding)
(1)出现在继承过程中,一个对象变量可以指示多种实际类型的现象称之为多态。(2)而在运行时能过自动地选择调用哪个方法的现象称为动态绑定。例如:
这里的e.getSalary知道自己调用的是子类对象的还是父类对象方法。
4、调用对象方法的执行过程
(1)编译器查看对象声明的类型和方法,获得:所有可能调用的方法;
(2)接下来,编译器查看调用方法的参数类型。根据函数名字,匹配不同的参数类型,完成重载解析(Overlording resolution)。这一步获得:需要调用方法的签名。方法的签名=方法的名字+参数列表。
(3)如果是static、private、final和 构造函数,编译器可以准确地知道调用哪个方法,这种方式成为静态绑定(static binding);与此对应,调用方法依赖与隐式的参数的类型实现动态绑定。
(4)当程序运行时,虚拟机采用动态绑定的方式时,一定调用与x所引用对象的实际类型最合适的那个的类的方法。虚拟机为了查找,会预先为每个类建立一个方法表(method)。
注意:在覆盖一个父类的方法时,不要遗漏了超类的方法的可见性,也即是不要遗漏了public。
5、阻止继承:final 类型和方法
确保类和方法不会被子类改变语义,不过在一个类声明为final类,只有方法自动成为final类,而不包括域。
6、抽象类
(1)声明的关键字:abstract;
(2)虽然很多程序员认为abstract类中不能包含具体的方法,但是还是建议把通用的域和方法(不管是否抽象的)都放在超类中(不管是否超类)中。
(3)抽象类不能实例化(new abstract class),但是可以定义抽象类的对象,也只能引用非抽象类的对象。例如:abstract class p = new subclass(“wenliang”);C++中通过一个只有尾部=0的标记的纯虚函数,抽象类方法;
7、Java中控制可见性
(1)private:本类可见;
(2)protected:本包和其所有子类(其他包的)可见;
(3)public:所有类可见;
(4)默认,没有修饰符:本包可见。
8、Obeject类
(1)equals():比较两个对象是否相等;
(2)hashCode():由对象导出的 一个整型值;
(3)toString():返回对象值的字符串。
9、泛型数组列表: ArrayList
(1)完全解决运行时动态更改数组的问题,即是在确定了数组的大小,更改数组的问题;
(2)ArrayList:类似于数组,添加或者删除数据时,可以自动调节数组容量,无需额外的代码;类型参数的泛型类,使用一对尖括号,也称为“菱形”语法。
(3)add():添加元素到数组列表中;
(4)ensureCapacity():用在可以实现确定数组可能填充的元素大小;
(5)size():获得数组列表的大小;
(6)数组容量与数组的大小有区别的:数组是分配100个元素的存储空间;而容量只是拥有存储100个元素的潜力;
(7) trimToSize():确认不会添加任何元素;
(8)set():替换数组中已有的元素;get():获取元素;remove()移除数组元素。
10、对象包装器: Wrapper
比如在Java中,基本数据类型int、float等是不能用在ArrayList中,这个时候需要把基本类型转为基本类型对应的类,这就是包装器,对应有Integer、Float、Long、Double、Short、 Character、Void、 Boolean。这些都是final类,不允许继承。
11、参数变量可变的方法
主要是方法中的参数更具需要是可变的,最常见的莫过与printf(),既可以是两个,也可以是三个。
例如:定义 public static double max(double…value){}
12、枚举类
(1)实际上,声明和定义类型是一个类,里面的元素是就是实例,但是比较枚举类型的值,一定用==,而不是equals;
(2)所有的枚举类型都是Enum的子类,最有用的是toString(),返回枚举常量名;toString的你方法是valueOf; ordinal()返回枚举常量值的位置。
- Java入门_学习笔记[4]_继承
- java 从零开始,学习笔记之基础入门<重载_覆盖_继承>(十)
- Swift_学习笔记_继承
- java学习笔记3_继承与多态
- Unity3d_学习笔记_入门
- java 从零开始,学习笔记之基础入门<Oracle_函数_触发器_游标_存储过程_视图>(三十五)
- 【菜鸟JAVA入门】01_继承
- Java核心技术(第8版)学习笔记_继承(2)_反射
- ruby入门_继承
- 学习笔记_毕向东 Java_继承_抽象类_接口_多态 2014.7.13
- Ruby学习笔记(19)_继承
- Java 回顾笔记6 (上午)_继承
- java 从零开始,学习笔记之基础入门<类_方法_构造器>(三)
- java 从零开始,学习笔记之基础入门<抽象类_接口_多态>(十三)
- Java入门基础_学习笔记[5]_接口与内部类
- Java基础学习9_继承
- java 从零开始,学习笔记之基础入门<SQL_Server_视图_函数_存储过程_触发器等>(二十三)
- java学习笔记_线程
- jquery attr()方法
- HDU 1009FatMouse' Trade
- Python制作字母验证码
- Sharing Files with NFC ->Sending Files to Another Device
- 我所认识的EXT2(二)
- Java入门_学习笔记[4]_继承
- leetcode 374 Guess Number Higher or Lower C++
- leetcode 383. Ransom Note
- HDU 1491 Octorber 21st
- Java序列化时,静态的成员变量 "可以被拿到数据" 是因为 类加载器之前就把这个类加载好了,拿到的是加载好的数据
- 字体属性及测量(FontMetrics)
- 单例模式(懒汉,饿汉)
- SQL三表连接查询与集合的并、交、差运算查询
- 手动调整KVM镜像image的disk磁盘大小