为今后面向笼统的编程打下坚固的基本。
封装的观点照样很轻易明白的。假如你会定义类,那末相信你对封装的观点已完整控制了。下面定义的几个类,就是对数据的封装。
继续的优点是代码复用。继续的子类自动具有父类中的一切属性和要领。所以继续已存在的类就是复用这些类的要领和域。
在此基本上,子类还可以增添一些新的要领和域,以满足新的需求。这是Java顺序设想中的一项核心技术。
那末怎样推断是不是须要继续呢?"is-a"关联是继续的一个显著特性。这句话的意义可以解释为:Student之所以继续Person,
是因为Student 是Person。假如没有这个关联也就不须要这个继续了。这也是里氏替代准绳的定义,子范例必需可以替代掉它们的父范例。
在经由过程扩大超类定义子类的时刻,仅需指出子类与超类的不同之处。因此在设想类时,应当将通用的要领放到超类中,
而将具有特别用处的要领放到子类中,这类将通用的功用放到超类的做法,在面向对象顺序设想中非常广泛。
动态绑定有一个非常重要的特性:无需对现存的代码举行修正,便可以对顺序举行扩大。所以多态是开放关闭准绳的基本。
下面是一个继续和多态完成的细致例子:
abstract 是笼统的关键字。(最好从笼统类继续而不是从细致类继续)。
public abstract class Person { // 笼统类 private String name; // 私有变量 public String getName() { // Getter要领 return name; } public void setName(String name) { //Setter要领 this.name = name; } public Person(String name) { // 组织函数,用于初始化name super(); this.name = name; } public abstract String getDesc(); // 笼统类中的笼统要领。 只要声明,没有细致完成。 public String toString(){ // toString要领覆盖了Object类的toString要领 return name + getDesc(); } }
extends 是继续的关键字。Student继续Person,所以Student具有name属性。
public class Student extends Person { // 继续类 private String major; // 新增添的数据 public String getMajor() { return major; } public void setMajor(String major) { this.major = major; } public Student(String name,String major) { // 组织函数用于初始化 super(name); // 挪用超类组织函数 this.major = major; } @Override public String getDesc() { // 必需完成超类中的笼统要领 // TODO Auto-generated method stub return " : a student, major is " + major; }
通常继续超类的子类,必需完成(无论是哪一种完成体式格局)超类中定义的笼统要领。
public class Employee extends Person{ private double salary; public double getSalary() { return salary; }public void setSalary(double salary) { this.salary = salary; } public Employee(String name, double salary) { super(name); this.salary = salary; } @Override public String getDesc() { // TODO Auto-generated method stub return " :a employee, salary is " + salary; } }
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Person[] p=new Person[2]; p[0]=new Student("Mark", "IT"); p[1]=new Employee("Jerry", 2000); for (Person person : p) { System.out.println(person.getName()+person.getDesc()); } } }
运转效果
从这个例子也可以看出,没有封装就谈不上继续,而没有继续,就不可能有所谓的多态。
而明白封装、继续和多态(特别是多态)是明白设想形式的基本。
相识更多关于java的教程可以接见:Java教程
以上就是java的三大特性封装、继续、多态的细致内容,更多请关注ki4网别的相干文章!