JAVA基础学习---- 多态实例(1)
2017-05-13 18:42
357 查看
我们知道面向对象的三大特性是封装、继承和多态。然而我们有时候总是搞不清楚这些概念。下面对这些概念进行整理,
为以后面向抽象的编程打下坚实的基础。
封装的概念还是很容易理解的。如果你会定义类,那么相信你对封装的概念已经完全掌握了。下面定义的几个类,就是对数据的封装。
继承的好处是代码复用。继承的子类自动拥有父类中的所有属性和方法。所以继承已存在的类就是复用这些类的方法和域。
在此基础上,子类还可以添加一些新的方法和域,以满足新的需求。这是Java程序设计中的一项核心技术。
那么如何判断是否需要继承呢?"is-a"关系是继承的一个明显特征。这句话的意思可以解释为:Student之所以继承Person,
是因为Student 是Person。如果没有这个关系也就不需要这个继承了。这也是里氏替换原则的定义,子类型必须能够替换掉它们的父类型。
在通过扩展超类定义子类的时候,仅需指出子类与超类的不同之处。因此在设计类时,应该将通用的方法放到超类中,
而将具有特殊用途的方法放到子类中,这种将通用的功能放到超类的做法,在面向对象程序设计中十分普遍。
动态绑定有一个非常重要的特性:无需对现存的代码进行修改,就可以对程序进行扩展。所以多态是开放封闭原则的基础。
下面是一个继承和多态实现的具体例子:
abstract 是抽象的关键字。(最好从抽象类继承而不是从具体类继承)。
public String toString(){ // toString方法覆盖了Object类的toString方法
return name + getDesc();
}
extends 是继承的关键字。Student继承Person,所以Student拥有name属性。
凡是继承超类的子类,必须实现(无论是哪种实现方式)超类中定义的抽象方法。
为以后面向抽象的编程打下坚实的基础。
封装的概念还是很容易理解的。如果你会定义类,那么相信你对封装的概念已经完全掌握了。下面定义的几个类,就是对数据的封装。
继承的好处是代码复用。继承的子类自动拥有父类中的所有属性和方法。所以继承已存在的类就是复用这些类的方法和域。
在此基础上,子类还可以添加一些新的方法和域,以满足新的需求。这是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;
}}
相关文章推荐
- JAVA基础学习之多态
- 黑马程序员——java基础学习(面向对象,多态)
- Java基础学习总结(5)——多态
- java基础学习总结——多态(动态绑定)
- java基础学习05(面向对象基础01--类实例分析)
- 【Java学习笔记】基础知识学习10【继承与多态】
- JAVA基础学习(八)---多态、简单工厂、Object类equals和toString
- Java基础学习10_多态
- 【Java基础学习】 接口与多态的形象化举例
- Java学习之旅基础知识篇:面向对象之封装、继承及多态
- java 从零开始,学习笔记之基础入门<线程及实例分析>(十九)
- Java基础学习之final和多态及类型转换
- 黑马程序员—java基础学习--抽象类(abstract)、接口(interface)、多态
- java基础学习总结——多态(动态绑定)
- 黑马程序员-----java基础六(继承与多态学习)
- 黑马程序员—5—Java基础:多态学习笔记和学习心得体会
- Java基础学习中,关于面向对象中多态、抽象类、接口的总结
- JSP基础实例_Java动态实现课程表_学习笔记
- JAVA基础学习之多态抽象与接口
- Java基础学习第九天——多态,抽象类,接口