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()返回枚举常量值的位置。

0 0
原创粉丝点击