JAVA之面向对象(三)
来源:互联网 发布:部落冲突龙宝宝数据 编辑:程序博客网 时间:2024/04/29 22:55
类的继承
方法的重写应遵循“两同两小一大”规则——两同指方法名相同,形参相同,两小指子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法生命抛出的异常类应比父类方法生命抛出的异常类更小或相等;一大指子类方法的访问权限应与父类方法的访问权限一致或更大。
覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。
super不能出现在static修饰的方法中。
子类当系统创建子类时,实际上系统会为子类对象分配两块内存,一块用于存储在子类定义的实例变量,一块用于存储继承自父类的实例变量。
子类中实例方法访问成员变量顺序——首先是该方法中是否有对应的局部变量,其次是子类中是否有对应的成员变量,最后是父类中有没有对应的成员变量。
当用super调用父类构造器时,这行代码必须出现在子类构造器的第一行。
不管如何,父类构造器都会在子类构造器之前调用。
创建任何对象都是从该类继承树的最顶端开始执行的,如果某个父类通过this调用其自身的构造器,那么会依次执行其多个构造器。
多态
JAVA引用有两个类型,一个是编译时类型,一个是运行时类型。编译时类型由声明的类型决定,运行时类型是由实际赋值的对象决定的。这就可能同一个类的引用的同一个方法产生截然不同的行为,这就是所谓的多态性。
JAVA允许把子类对象直接赋值给父类的引用,无须进行任何类型转换,其被称为向上转型,向上转型是由系统自动完成的。
与方法不同,实例变量没有多态性可言。
引用变量只能调用编译时类型所具有的方法,但实际执行的方法是运行时类型的方法。
如果让引用变量执行运行时类型的方法,则需要强制转型。
基本数据类型的强制类型转换只能在数值类型之间进行,这里说的数值类型包括整数型,浮点型和字符型。
引用的强制类型转换必须在具有继承关系的两个类之间进行。
在使用强制类型转换前,可以先使用instanceof运算符判断是否可以成功转换。
instanceof的前一个操作数是一个引用类型变量,后一个操作上通常是一个类,其用于判断前一个引用的对象是否是后面的类或是其子类或是其实现类的实例。
instanceof运算符前面的编译时类型要么与后面类相同,要么存在继承关系,否则报错。
继承和组合
尽量不要在子类中重写父类要调用的方法。
组合是通过将旧类的对象作为新类的成员变量来实现的,通常在新类中加上private来修饰被组合的旧类对象。
初始化块
初始化块的修饰符只能是static,使用static修饰的初始化快被称为静态初始化块。
初始化块只在创建JAVA对象时隐式执行,且在构造器之前执行。(实例变量的初始化也在构造器之前)
变量的定义可以在初始化块之后
public class instance {{a=6;}int a=9;public static void main(String []args){System.out.println(new instance().a);}}
结果是9,因为初始化块最早执行。
初始化块是对构造器的补充,当某一段初始化处理代码对所有对象都相同且无需接收参数时,就可以放在初始化块中执行。
静态初始化块与类相关,系统将在类初始化阶段执行静态初始化块,因此静态初始化块的执行在普通初始化块之前。
和所有静态成员一样,静态初始化块不能对实例成员进行初始化。
java系统在加载某个类时,总是保证其所有父类(包括直接和间接父类)全部加载并初始化。
当JVM第一次主动使用某个类时,系统会在准备阶段给该类所有类变量分配内存。
0 0
- Java基础之面向对象(三)
- JAVA之面向对象(三)
- Java 面向对象(三)
- Java面向对象(三)
- Java面向对象(三)
- 黑马程序员-----java基础三(之面向对象)
- java学习笔记(三)之面向对象
- 重新认识java(三) ---- 面向对象之继承!
- java面向对象(三)之抽象类,接口
- 重新认识java(三) ---- 面向对象之继承!
- 学java教程之面向对象(三)
- java 面向对象编程之三
- Java基础之三:面向对象
- java基础之面向对象(三)
- Java基础(五)OOP面向对象之(三) 面向对象思想概述(续)
- Java基础(五)OOP面向对象之(三) 面向对象思想总结
- Java面向对象(三)
- 三、JAVA面向对象
- JS中Date对象getYear()和getFullYear()的区别
- Emacs Configuration
- js课程笔记(二)DOM小结
- const和#define区别
- Html常用行级标签练习
- JAVA之面向对象(三)
- 设计模式学习笔记之观察者模式
- LeetCode215. Kth Largest Element in an Array
- Java 类的内部嵌套子类型定义 如何正确饮用
- 原生js用户注册界面
- 桥接模式
- Kali Linux渗透测试实战 1.1 Kali Linux简介
- ios NSURLSession 来请求图片和json数据
- HashMap与Hashtable的区别