面向对象的三个特性
封装
定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。
好处:1、良好的封装能够减少耦合;
2、类内部的实现可以自由地修改;
3、类内部的实现可以自由地修改。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Encapsulation { 2 private int numA = 0; 3 private int numB = 0; 4 public int getNumA() { 5 return numA; 6 } 7 public void setNumA(int numA) { 8 this.numA = numA; 9 } 10 public int getNumB() { 11 return numB; 12 } 13 public void setNumB(int numB) { 14 this.numB = numB; 15 } 16 public int getAddResult(){ 17 return numA + numB; 18 } 19 }
继承
定义:继承是指一个对象直接使用另一对象的非private属性和方法。
对象的继承代表了一种“is-a”的关系,如果两个对象A和B,可以描述为B是A,则表明B可以继承A。例如:猫是动物,则猫类可以继承动物类。
如果子类继承与父类:
1、子类拥有父类非private的属性和方法;
2、子类具有自己的属性和方法,即子类可以扩展父类没有的属性和方法;
3、子类可以以自己的方式实现父类的方法(方法重写)。
父类:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Person { 2 protected String name; 3 protected int age; 4 }
子类:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Student extends Person{ 2 public Student(String name, int age){ 3 this.name = name; 4 this.age = age; 5 } 6 public void Show(){ 7 System.out.println("我叫" + this.name + ", 今年" + this.age + "岁,是一名学生!"); 8 } 9 } 10 11 12 public class Teacher extends Person{ 13 public Teacher(String name, int age){ 14 this.name = name; 15 this.age = age; 16 } 17 public void Show(){ 18 System.out.println("我叫" + this.name + ", 今年" + this.age + "岁,是一名教师!"); 19 } 20 }
测试类:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Test { 2 public static void main(String[] args) { 3 Teacher teacher = new Teacher("KAKA", 40); 4 Student student = new Student("MESSI", 20); 5 6 teacher.Show(); 7 student.Show(); 8 } 9 }
多态
定义:不同对象对同一操作的不同实现。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Person { 2 protected String name; 3 protected int age; 4 5 public void Show(){} 6 protected void Work(){} 7 8 } 9 10 public class Teacher extends Person{ 11 public Teacher(String name, int age){ 12 this.name = name; 13 this.age = age; 14 } 15 public void Show(){ 16 System.out.println("我叫" + this.name + ", 今年" + this.age + "岁,是一名教师!"); 17 } 18 public void Work() { 19 System.out.println("我叫" + this.name + ",是一名教师,我的工作是育人!"); 20 } 21 } 22 23 public class Student extends Person{ 24 public Student(String name, int age){ 25 this.name = name; 26 this.age = age; 27 } 28 public void Show(){ 29 System.out.println("我叫" + this.name + ", 今年" + this.age + "岁,是一名学生!"); 30 } 31 public void Work() { 32 System.out.println("我叫" + this.name + ",是一名学生,我的工作是学习!"); 33 } 34 }
面向对象的三个特性之间关系。没有封装就没有继承,没有继承就没有多态。