接触过面向对象的人都知道面向对象有三大特征,分别是封装、继承和多态。这三者分别指的是什么,为什么是这哥仨,使用他们有什么好处,我们来梳理一下。
封装 原则:
隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:
①将变化隔离。
②便于使用。
③提高重用性。
④提高安全性。
Demo1:
比如一个学生类:他具有姓名和年龄两个属性,,但是为了提高安全性和重用性,便于使用,我们将其封装起来。
public class Student {private String name;private int age;public Student() {super();//TODO Auto-generated constructor stub}public Student(String name, int age) {super();this.name= name;this.age= age;}public String getName() {returnname;}public void setName(String name) {this.name= name;}public int getAge() {returnage;}public void setAge(int age) {this.age= age;}@Overridepublic String toString() {return"Student [name=" + name + ", age=" + age + "]";}}
其中,类的成员变量都用private修饰,提高安全性。
继承概述
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
父类又称基类,超类;子类又称派生类。
子类可以直接访问父类中的非私有的属性和行为。
关键字为 extends
好处
提高了代码的复用性。
让类与类之间产生了关系,提供了多态的前提。
特点
a.Java只支持单继承,不支持多继承。
因为如果可以多继承,就会出现调用不明确的问题。
b.Java支持多重继承(继承体系)
什么时候用
如果多个类之间有is a 的关系时候,可以定义为继承。
定义类(A,B)的时候:
A is a B 中A是子类。
B is a A 中B是子类
注意:不要为了去继承部分功能,而去使用继承。
Demo2:
class animal{private String name;private int age;public void setName(){this.name=name;}public String getName(){returnname;}public void setAge(){this.age=age;}public int getAge(){returnage;}public void run(){System.out.println("跑步");}public void eat(){System.out.println("吃饭");}}class dog extends animal{publicvoid eat(){System.out.println("狗吃骨头!");}} class car extends animal{public void eat(){System.out.println("猫吃鱼!");}}class AnimalTest{public static void main(String[] args){dog d = new dog();d.eat();d.run();car c = new car();c.eat();c.run();}}
运行结果:
狗吃骨头!
跑步
猫吃鱼!
跑步
多态概述:
在同一个方法中,由于参数不同而导致执行效果各异的现象就是多态。
拿生活中的例子来说:
水(水,冰,水蒸气)
狗:狗是狗,狗是动物,狗是宠物,狗是食物
前提条件:
A:要有继承关系。
B:要有方法重写。
C:要有父类引用指向子类对象。
多态间的成员特点:
方法有重写,而变量没有
成员变量
编译看左边,运行看左边。
成员方法
编译看左边,运行看右边。
注意:多态有三种体现形式
类多态
抽象类多态
接口多态
优点:
提高代码的扩展性和可维护性。
弊端:
父类引用不能使用子类特有功能。
基本类型:隐式转换(小到大),强制转换(大到小)。
引用类型:向上转型(小到大),向下转型(大到小)。
不如意的时候不要尽往悲伤里钻,想想有笑声的日子吧