类和对象的高级设置
在Java中,类的定义与实现必须一次完成,成员、方法都必须定义在类之中。
1.在Java中,类的定义与实现必须一次完成,成员、方法都必须定义在类之中。
2.方法的局部变量是另一个类。
3.this
The order“this”point to the current class or object.
this是一个keyword,表示对象中指向自身的一个引用,在实例方法中用来指代当前对象。
this的主要用途:
4.private只能被当前public类访问,不能通过其他类访问。
本文章由西安达内编辑整理
5.Encapsulation can enhance maintainability.
封装能够增强系统的可维护性。
6.方法签名
方法签名就是指方法的参数类型、顺序或者个数不一致。
方法签名不一致,方法就可以被重载。
7.类的初始化过程
(1)先对父类初始化(先初始化实例成员,包括属性和代码块<无static修饰>,初始化构造器)
(2)再对子类初始化
(3)如果有静态成员(静态属性和静态代码块),从父类到子类,先执行类的加载并且初始化这些静态成员。
8.Constructor(构造器)
Constructor can not be inherited.构造器不能被继承。
Java程序员为对象提供初始化的构造器是一个良好的编程习惯。
构造器存在的唯一目的就是初始化。
如果存在多个构造器,就可以被重载。
如果不指定构造器,JVM就会提供缺省的构造器。
如果自定义的类中没有构造器,JVM会提供无参的default修饰的构造器。
如果类中已有带参的构造器,JVM不会提供默认的构造器。
9.继承,是静态复用或者说是类型复用的机制。
带有继承关系的类的初始化过程
(1)如果有static属性修饰的代码块,则从父类到子类,先执行类的加载,并且初始化这个静态成员;
(2)如果没有static成员,则先初始化父类实例成员和构造器,再初始化子类实例成员和构造器。
10.为什么要使用继承?
(1)继承者(子类)要扩展父类的功能
11.父类的引用类型可以指向其子类的实例:
sample:
B b=new SubB();
子类SubB可以当父类B来用。
但是,很显然地,父类B不能当子类用,我们可以把这种错误的继承行为比喻成“乱伦”。
12.Single Inheritance:
(1) 任何子类都只能有一个父类;
(2)所有的类都是Object的子类;
(3)如果说一个类不继承任何子类,会自动隐藏“extends Object”。
13.构造器是怎么样运行的?
子类的构造器默认情况下会调用父类的构造器,如果子类的构造器指定调用父类带参的构造器,则父类可以不提供缺省的构造器。
14.Polymorphism
在多态中当中,类的属性在编译阶段确定,在编译阶段绑定。
静态方法不能override。
静态方法不能用实例方法重置。
静态方法覆盖静态方法,调用的不是声明类型时定义的方法。
15.keyword::instanceof
description:判断某个实例是否为某个类型的实例或者其子类的实例。
Syntax:
<examplename> instance of <typename>
16.casting:
父类不可以当子类用,即使类型匹配+强制转换,也会throws NumberFormatException。
17.方法覆盖
父子类之间满足一下条件可以override:
(1) 方法名、方法签名一致;
(2) 子类修饰符的限定范围不能小于父类的修饰符
(3) 如果子类抛出的异常类型与父类抛出的异常类型有继承关系,那么子类异常类型不能是其父类异常类型的父类或更高,否则子类的Exception 会抢先throws,导致父类Exception失效。
18.Polymorphism运行机制:
在类编译阶段,编译器会检查类型是否匹配(检查声明类型、方法等)。在运行阶段,JVM会调用实例的对应方法,先检查父类方法,后检查子类方法。然后编译器会检查实例声明的类型。
19.什么是OOP?OOP相对于面向过程编程有哪些优点?
OOP,Object-Oriented Programming,面向对象编程不同于面向过程编程:
(1)OOP关注对象和角色,也就是事物的本质
1)OOP把客观世界中的对象抽象成对应的类;
2)通过类构造实例;
3)通过依赖、继承、实现等形式建立对象间的通信关系
(2)OOP易于扩展,增加或改变业务的功能,无需大幅改动改变源代码
(3)OOP易于建模,OOP就是软件架构师在计算机高级语言中对客观世界的抽象和再现,人们可以很好地理解和建立起计算机中的抽象模型
面向过程编程:
关注的是事物的行为、实现步骤、实体的操作;
面向过程编程的代码是分散的,不具备良好的架构和设计理念;
应对变化的能力很差,往往牵一发而动全身。
例如在一个象棋游戏程序中,OOP关注棋盘、棋手和规则三个对象以及它们之间的关系,而不关心下棋的各种各样的步骤。
20.static成员常用来提前做全局的初始化工作。
21.super
(1)调用父类的属性;
(2)调用父类的方法;
(3)子类与父类有同名的方法,子类可用super.methodname来区分是父类的方法;
22.怎样使用抽象类?
(1)尽可能把可以共用的方法和逻辑放到抽象类中;
(2)属性应尽可能放到子类中。