面向对象三大特性
- 封装
- 继承
- 多态
类的封装
- 封装的意义
- 提高程序的安全性,保护数据 高内聚 低耦合
- 隐藏代码实现细节
- 统一接口 属性私有 get/set
- 系统可维护性增强
package com.luo.demo;
public class Application {
public static void main(String[] args) {
Person xiaoming = new Person();
xiaoming.setName("小明");
String name = xiaoming.getName();
System.out.println(name);
xiaoming.setAge(20);
System.out.println(xiaoming.getAge());
}
}
package com.luo.demo;
public class Person {
private String name;
private int age;
private int id;
// alt+insert 快速生成get set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
//可以对私有属性做一些验证
public void setAge(int age) {
if (age > 120 || age < 0) {
this.age = 3;
} else {
this.age = age;
}
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
类的继承
- 继承的本质是对一批类的抽象,从而实现对现实世界更好的建模
- extends 意思是扩展,子类对父类的扩展
- Java中只有单继承,没有多继承
- 继承是类和类之间的一种关系,除此之外类和类之间还有 组合 依赖 聚合等关系
方法重写
- 重写
- 需要有继承关系,子类重写父类的方法
- 方法名必须相同
- 参数列表必须相同
- 静态方法和非静态方法有很大区别
- static final private 修饰的方法不能被重写
- 为什么要重写
- 父类的功能,子类不一定需要,或者不一定满足
package com.luo.demo;
public class Application {
public static void main(String[] args) {
//静态方法和非静态方法的区别很大 public static void say();
Son son = new Son();
son.say();
//非静态方法才会去重写父类的方法 public void say();
Parent parent = new Son();
parent.say();
}
}
多态
- 即同一个方法可以根据发送对象的不同而采用多种不同的行为方式
- 一个对象的实际类型是确定的,但可以指向对象的引用的类型可以有很多
多态存在的条件
有继承关系
子类重写父类的方法
父类引用指向子类对象
多态是方法的多态,属性没有多态
package com.luo.demo;
public class Application {
public static void main(String[] args) {
// 一个对象的实际类型是确定的
//但是可以指向的引用类型就不确定了,父类的引用可以指向子类
Student s1 = new Student();
Person S2 = new Student();
Object s3 = new Student();
//对象能执行哪些方法主要看对象左边的类型,和右边关系不大
//当方法名相同时,重写
s1.say();
s2.say();
//如果调用子类不存在方法时,会强制转换类型
((Student)s2).say();
}
}