面向对象编程的三大特征

封装

在我们写代码的时候经常会涉及两种角色: 类的实现者和类的调用者。
封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的, 只要知道如何使用类就行了。
这样就可以让类的使用者的学习和使用成本,从而降低了复杂程度。

private实现封装
private/ public 这两个关键字表示 “访问权限控制” 。
被 public 修饰的成员变量或者成员方法, 可以直接被类的调用者使用。 被 private 修饰的成员变量或者成员方法, 不能被类的调用者使用。
换句话说, 类的使用者根本不需要知道, 也不需要关注一个类都有哪些 private 的成员.。从而让类调用者以更低的
成本来使用类。

继承

代码中创建的类, 主要是为了抽象现实中的一些事物(包含属性和方法).
有的时候客观事物之间就存在一些关联关系, 那么在表示成类和对象的时候也会存在一定的关联.


// Animal.java 
public class Animal { 
 public String name; 
 
 public Animal(String name) { 
 this.name = name; 
 } 
 
 public void eat(String food) { 
 System.out.println(this.name + "吃" + food); 
 } 
} 
// Cat.java 
class Cat { 
 public String name; 
 
 public Cat(String name) { 
 this.name = name; 
 } 
 
 public void eat(String food) { 
 System.out.println(this.name + "吃" + food); 
 } 
} 
// Bird.java 
class Bird { 
 public String name; 
 
 public Bird(String name) { 
 this.name = name; 
 } 
 
 public void eat(String food) { 
 System.out.println(this.name + "吃" + food); 
 } 
 
 public void fly() { 
 System.out.println(this.name + "正在飞"); 
 } 
} 

这个代码我们发现其中存在了大量的冗余代码。

这三个类都具备一个相同的 eat 方法, 而且行为是完全一样的。
这三个类都具备一个相同的 name 属性, 而且意义是完全一样的。
从逻辑上讲, Cat 和 Bird 都是一种 Animal (is - a 语义)。
此时我们就可以让 Cat 和 Bird 分别继承 Animal 类, 来达到代码重用的效果。Animal 这样被继承的类, 我们称为 父类 , 基类 或 超类, 对于像 Cat 和Bird 这样的类, 我们称为子类、派生类和现实中的儿子继承父亲的财产类似,
子类继承父类除构造方法外的所有东西。
基本语法
class 子类 extends 父类 { }
注意:

  • Java中是单继承一个子类只能继承一个父类。
  • 子类会继承父类除构造方法外的所有东西。
  • 子类的实例中也包含父类的实例,可以用super关键字得到父类实例的引用。
  • 子类继承父类必须先帮助父类进行构造。
  • super()调用父类的构造方法(必须放在第一行),父类有的子类就不用定义了。
  • 子类中访问父类中private修饰的属性时要借助父类中的get/set方法,或父类的构造方法。

多态:

多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
向上转型:
子类赋值给父类; 父类引用子类对象; 父类只能调用自己的方法; (父类和子类有相同方法时,父类调用该方法时,
调用的是子类的方法,运行时绑定,也叫多态)

运行时绑定:
父类引用子类的方法时(向上转型) 父类子类有同名的覆盖方法 通过父类的引用调用这个方法时;

向上转型的三种方式:
1、直接赋值
2、方法传参
3、方法返回

向下转型:父类赋值给子类(发生强转); 必须先向上转型;谁向上转型向下转型时就强转为谁;

使用多态的好处:
1、 类调用者对类的使用成本进一步降低.
封装是让类的调用者不需要知道类的实现细节.
多态能让类的调用者连这个类的类型是什么都不必知道, 只需要知道这个对象具有某个方法即可.
因此, 多态可以理解成是封装的更进一步, 让类调用者对类的使用成本进一步降低.
这也贴合了 <<代码大全>> 中关于 “管理代码复杂程度” 的初衷.
2、能够降低代码的 “圈复杂度”, 避免使用大量的 if - else
3、 可扩展能力更强.
如果要新增一种新的形状, 使用多态的方式代码改动成本也比较低.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值