面向对象三个基本特征
封装、继承、多态
封装
什么是封装
封装就是隐藏对象的属性和实现细节,仅向外界暴露该暴露的接口。
代码举例
public class Person {
private String name;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
- 将属性私有化,外界只能通过get/set方法来获取/改变属性
好处
- 可以实现"高内聚,低耦合"
- 提高系统可扩展性,可维护性
继承
何为继承
继承可以使得子类获得父类的所有属性和(非static)方法,子类可以重写父类的方法,实现子类特有方法
代码举例
public class Person {
private String name;
private String sex;
public void run() {
System.out.println("人在跑");
}
public void say() {
System.out.println("我是人");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
public class Student extends Person{
private int sId;
@Override
public void run() {
System.out.println("学生在跑1000米");
}
public int getsId() {
return sId;
}
public void setsId(int sId) {
this.sId = sId;
}
}
public class TestOOP {
public static void main(String[] args) {
Student student = new Student();
student.setName("学生");
System.out.println(student.getName());
student.say();
student.run();
}
}
多态
何为多态
多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
简单来说,多态就是相同的事,一个接口可以多种实现。
代码举例
public class Person {
private String name;
private String sex;
public void work() {
System.out.println("人工作");
}
public void say() {
System.out.println("我是人");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
public class Student extends Person{
private int sId;
@Override
public void work() {
System.out.println("学生在上课");
}
public int getsId() {
return sId;
}
public void setsId(int sId) {
this.sId = sId;
}
}
public class Teacher extends Person{
private int salary;
@Override
public void work() {
System.out.println("老师在教书");
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
}
import org.junit.Test;
public class TestOOP {
@Test
public void testOOP() {
Person person = new Student();
person.work();
//向下转型
Student student = (Student) person;
method(student);
//如果 student 是 Person 的子类则 返回true
System.out.println((student instanceof Person));
}
public void method(Person person) {
person.work();
}
}
- 向上转型多态,向下转型用(x instanceof A)进行判断,X是A的子类返回true,反之false
- 多态是运行时行为