1.面向对象特性
封装性
指的就是将描述某种实体的数据和基于这些数的操作集合到一起,形成一个封装体
封装的思想保证了类内部数据结构的完整性,使用户无法轻易直接操作类的内部数据,这样降低了对内部数据的影响,提高了程序的安全性和可维护性。2.继承性
指在一个现有类(父类)的基础上在构建一个新类(子类),子类可以拥有父类的成员变量以及成员方法(但是不一定能访问或调用,例如父类中private私有的成员变量以及方法不能访问和调用)。继承的作用就是能提高代码的复用性。子类拥有父类中的一切(拥有不一定能使用),它可以访问和使用父类中的非私有成员变量,以及重写父类中的非私有成员方法。
3.多态性
方法重写和对象多态(子父对象之间的相互转换)
知识点:
- 向上转型可以当做隐藏自身的方法,所以,再转回来(向下转型)方法就会恢复原状。 该是你的还是你的。
- 直接向下转型,父类不具有子类的独有方法,所以即使转化成功,也是个残废儿子,还不如不转,所以直接报错转化失败。 不是你的你想都别想。
- 内存中,因为向上转型是父类的引用指向为子类的对象,所以,它只是指向了父类应该拥有的属性和方法,而子类的独有的方法和属性就不指向了(或者说隐藏了),当再强转到子类时。又重新指向了子类对象,那属于它的东西又恢复了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21class Person{
public void print(){
System.out.println("一个普通人");
}
}
class SuperMan extends Person{
public void fly(){
System.out.println("I can fly");
}
public void fire(){
System.out.println("I can make fire out");
}
}
public class Main {
public static void main(String[] args) {
Person person=new SuperMan();//向上转型
person.print();
SuperMan superMan=(SuperMan) person;//向下转型,强制转换
superMan.fly();
}
} - 通过分析可以发现向下转型本身是一件存在有安全隐患的操作,所以为了保证向下转型的正确性,往往需要在进行转型之前进行判断,判断某个实例是否是某个类的对象,这个就需要通过instanceof实现。
1
2
3
4
5
6
7
8
9public class Main {
public static void main(String[] args) {
Person person=new SuperMan();//向上转型
if(person instanceof SuperMan){
SuperMan man=(SuperMan) person;
man.print();
}
}
}
2.面向对象开发步骤
- OOA 面向对象的分析
- OOD 面向对象的设计
- OOP 面向对象的编程
3.类与对象 (类是对象的模板,而对象是类的实例)
1.内存
堆内存:保存对象的真正数据,都是每个对象的属性内容。
栈内存:保存的是堆内存的控件地址。
2.构造方法定义:
- 构造方法名称必须与类名称保持一致
- 构造方法不允许设置任何的返回值类型,即:没有返回值定义
- 构造方法是在使用关键字new实例化对象的时候自动调用的。
4.this
1.this
- 使用this调用当前类中属性:this.属性
- 当前类中的方法(普通方法、构造方法):this(),this.方法名称();
- 描述当前对象;
2.this调用方法
this除了调用属性之外,this也可以实现方法的调用,但是对于方法的调用就必须考虑构造与普通方法:
构造方法调用(this()):使用关键字new实例化对象的时候才会调用构造方法;
普通方法调用(this.方法名称()):实例化对象产生之后就可以调用普通方法。
5.构造方法
- 构造方法的名称与类名称保持一致
- 构造方法不允许有返回值类型声明
- 对象实例化操作一定要有构造方法
6.静态代码块、构造代码块、构造函数同时存在时的执行顺序
静态代码块 —>构造代码块 –> 构造函数;
7.static (关键字,是一个修饰符,用于修饰成员(成员变量和成员函数))
1.特点:
- 想要实现对象中的共性数据的对象共享,可以将这个数据进行静态修饰。
- 被静态修饰的成员,可以直接被类名所调用。也就是说,静态的成员多了一种调用方式。类名.静态方式。
- 静态随着类的加载而加载,而且优先于对象存在。
2.弊端:
有些数据是对象特有的数据,是不可以被静态修饰的。因为那样的话,特有数据会变成对象的共享数据。这样对事物的描述就出了问题。所以,在定义静态时,必须要明确,这个数据是否是被对象所共享的。
静态方法只能访问静态成员,不可以访问非静态成员。
因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。
静态方法中不能使用this,super关键字。
因为this代表对象,而静态在时,有可能没有对象,所以this无法使用。
主函数是静态的。
8.重载和重写的区别
9.super和this的区别