面向对象编程的三大特征
封装
概念
封装是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法 .
作用
防止该类的代码和数据被外部类定义的代码随机访问 .
特点
将事物的特征封装成属性,将事物的行为封装成方法,将内部字段私有化,并向外提供访问内部字段的方法.
-
良好的封装能够减少耦合
-
类内部的结构可以自由修改
-
可以对成员变量进行更精确的控制
-
隐藏信息,实现细节
封装步骤
- 修改字段的修饰来限制外部对内部字段的直接访问和修改,实现对内部细节的隐藏
- 对外提供get,set方法使得外部能够间接对内部数据进行访问修改
继承
概念
继承是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法.
作用
提高代码的重用性
特点
-
子类拥有父类非 private 的属性、方法 .
-
子类可以对父类进行扩展 ,可以拥有自己的属性和方法
-
子类可以用自己的方式实现父类的方法
-
Java 的继承是单继承,但是可以多重继承 ,不可以是多继承
(1) 可以继承的:
① 方法
② 属性
③ 特性
(2) 不能继承的:
① 构造方法
② 被static修饰的方法、属性
③ 被private修饰的方法、属性
单继承
一个子类只能拥有一个父类
多重继承
一个子类只能拥有一个父类,但是子类也可以作为其他类的父类被继承
继承的实现
使用extends关键字
Object类
Object类是所有类的根类,若没有显示的指定父类,则隐式的继承了Object类。都可以使用Object中的方法。
① toString():返回该对象的字符串表示
② equals():返回该对象是否与其他对象“相等”
③ finalize():由垃圾回收器对对象进行回收是调用
④ getClass():返回Object的运行时类的名称
⑤ hashCode():返回对象的哈希值
多态
概念
编译结果和运行结果不一致时,就是多态。
Animal animal = new Person();
在编译期,animal对象为Animal类型
在运行期,animal对象为Person类型
多态中方法调用
① 方法能够被重写,没有static修饰:编译看左边(父类),运行看右边(子类)
② 当方法被static修饰:编译和运行都看左边(父类)
③ 当子类有相同的字段:编译和运行都看左边(父类)
注:只有方法能重写的情况:编译看左边,运行看右边
其他情况:编译看左边,运行看左边
多态的使用场景
作为参数传递,建立在方法的重写上
public class Animal{
public void eat(){
System.out.println(“eat something...”);
}
}
public class Person extends Animal{
public void eat(){
System.out.println(“eat food...”);
}
}
public class Cat extends Animal{
public void eat(){
System.out.println(“eat catfood...”);
}
}
public class Test{
public static void main(String[] args){
Test t = new Test();
t.show(new person());
t.show(new Cat());
}
public void show(Animal animal){//编译时是Animal类型,运行时是具体传入的类型
animal.eat();
}
}