面向对象三大特性
面向对象三大特性:封装、继承、多态
封装
封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
封装的好处
- 隐藏类的实现细节;
- 只能通过规定方法访问数据;
- 方便加入控制语句;
- 方便修改实现;
封装的步骤
- 修改属性可见性 – 设为private
public class pet {
// 创建属性并修改可见性
private String name;
private int age;
}
- 创建get/set方法 – 用于属性读写
// 创建get方法
public String getName() {
return name;
}
// 创建set方法
public void setName(String name) {
this.name = name;
}
- 在get/set方法中加入控制语句 – 对属性进行合法判断
public void setAge(int age) {
// 加入控制语句
if(age > 0 && age < 100){
this.age = age;
}
}
继承(is-a)
继承:使用继承可以优化代码,将重复代码抽取到父类当中,减少代码量,方便修改代码
使用继承
- 编写父类
class pet {
//公共属性和方法
}
- 编写子类,继承父类
class dog extends pet {
//子类特有的属性和方法
}
class cat extends pet {
//子类特有的属性和方法
}
继承的特性
-
单根性
只能继承一个类,不能多重继承 -
传递性
从父类继承来的元素,可以被子类继承
子类访问父类成员
使用super关键字
- 访问父类构造方法
//构造器
public dog() {
// 访问父类构造方法
// super();
super("二哈",2);
}
- 访问父类构造属性
super.name;
- 访问父类方法
super.print();
不可被继承的资源
- 不可继承被私有化的属性和方法
- 构造方法
多态
多态:指一个行为,拥有多种不同表现形式。 例:小明拥有人类形态同时拥有学生形态
优点: 可扩展性强
使用多态实现思路
- 编写父类
class Pet {
//吃东西
public void eat(){
}
}
- 编写子类,子类重写父类方法
class Dog extends Pet {
//重写父类方法
public void eat(){
System.out.println("吃骨头");
}
}
- 运行时,使用父类类型,子类对象
class cat extends Pet {
//向上自然转型
Pet pet = new Dog();
}
何时使用多态
1.当父类为方法参数
2.当父类作为方法返回值
只能调用父类有的方法
例:
创建父类并添加方法
public class Father {
public void eat(){
}
}
创建子类重写父类方法并添加独有方法
public class Son extends Father{
public void eat(){
System.out.println("吃饭");
}
public void play(){
System.out.println("玩");
}
}
使用多态调用方法
public class Main {
public static void main(String[] args) {
Father father = new Son();
father.eat();
//报错
father.play();
}
}
编译看左边,运行看右边