Java入门_学习笔记[4]_继承
2016-08-15 11:15
253 查看
Java基础—继承(inheritance)
1、继承关键字:extends2、继承定义格式:
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 从零开始,学习笔记之基础入门<重载_覆盖_继承>(十)
- java 入门学习笔记(封装,继承,多态)
- Java 学习笔记 (3) -抽象类 abstract 接口 interface 内部类 inner class 继承 extends 实现 implements 包 package
- Java Reflection(反射) 入门学习笔记 之一
- Java学习笔记:前言(Java入门及推荐一本Java教材)
- java核心技术学习笔记7---继承与多态
- C\C++ 程序员从零开始学习Android - 个人学习笔记(八) - java基础 - 继承、抽象类、接口、内部类(待续)
- Java构造函数的继承-Java 学习笔记 (14)
- objective-c学习笔记第五章《objective-c 继承与java中的区别》
- java学习笔记《java面向对象编程》——继承
- java学习笔记七——继承
- Java学习笔记 第一章 入门
- thinking in java 学习笔记(一) 接口于多重继承
- (JAVA SE 学习笔记)Java.SE.第001讲.Java.SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行
- JAVA学习笔记之七继承和多态
- java学习笔记---第五章继承
- Java学习笔记---13.面向对象编程08-Java中继承的概念,子类实例化过程,super()及方法复写
- 学习笔记――Java入门基础
- 黑马程序员学习笔记四——Java 面向对象 特点之 继承
- C\C++ 程序员从零开始学习Android - 个人学习笔记(八) - java基础 - 继承、抽象类、接口、内部类(待续)