我们知道面向对象的三大特性是封装、继承和多态。然而我们有时候总是搞不清楚这些概念。下面对这些概念进行整理,

为以后面向抽象的编程打下坚实的基础。

封装的概念还是很容易理解的。如果你会定义类,那么相信你对封装的概念已经完全掌握了。下面定义的几个类,就是对数据的封装。

继承的好处是代码复用。继承的子类自动拥有父类中的所有属性和方法。所以继承已存在的类就是复用这些类的方法和域。

在此基础上,子类还可以添加一些新的方法和域,以满足新的需求。这是Java程序设计中的一项核心技术。

那么如何判断是否需要继承呢?"is-a"关系是继承的一个明显特征。这句话的意思可以解释为:Student之所以继承Person,

是因为Student 是Person。如果没有这个关系也就不需要这个继承了。这也是里氏替换原则的定义,子类型必须能够替换掉它们的父类型。

在通过扩展超类定义子类的时候,仅需指出子类与超类的不同之处。因此在设计类时,应该将通用的方法放到超类中,

而将具有特殊用途的方法放到子类中,这种将通用的功能放到超类的做法,在面向对象程序设计中十分普遍。

动态绑定有一个非常重要的特性:无需对现存的代码进行修改,就可以对程序进行扩展。所以多态是开放封闭原则的基础。

下面是一个继承和多态实现的具体例子:

abstract 是抽象的关键字。(最好从抽象类继承而不是从具体类继承)。

public abstract class Person { //抽象类

private String name; //私有变量

public String getName() { //Getter方法

returnname;

}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; //新增加的数据

publicString getMajor() {returnmajor;

}public voidsetMajor(String major) {this.major =major;

}public Student(String name,String major) { //构造函数用于初始化

super(name); //调用超类构造函数

this.major =major;

}

@Overridepublic String getDesc() { //必须实现超类中的抽象方法//TODO Auto-generated method stub

return " : a student, major is " +major;

}

凡是继承超类的子类,必须实现(无论是哪种实现方式)超类中定义的抽象方法。

public class Employee extendsPerson{private doublesalary;public doublegetSalary() {returnsalary;

}public void setSalary(doublesalary) {this.salary =salary;

}public Employee(String name, doublesalary) {super(name);this.salary =salary;

}

@OverridepublicString getDesc() {//TODO Auto-generated method stub

return " :a employee, salary is " +salary;

}

}

public classTest {public static voidmain(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继承和多态实例相关推荐

  1. java继承总结_java继承总结(二)

    java学习笔记 1.继承 关键字: extends 在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以extends只能继承一个类. eg: public class P ...

  2. java 继承关键字_Java继承

    继承的概念 继承是Java面向对象编程的基石,因为它允许创建分等级层次的类. 生活中的继承: 类的继承格式 class 父类{ } class 子类 extends 父类{ } 继承类型 需要注意的是 ...

  3. java 继承 冒号_java继承(extends)简单介绍

    继承相信很多人都有听说过,继承是面向对象的三个基本特征之一,下面的话就一起通过简单的文章来对java继承进行一下了解吧. 继承和现实生活中的"继承"的相似之处是保留一些父辈的特性, ...

  4. java类多例_Java多例设计模式实例详解

    本文实例讲述了Java多例设计模式.分享给大家供大家参考,具体如下: 一.多例设计模式定义 多例设计模式就是存在多个对象实例,供外部应用裯用,比喻数据库连接池. 二.多例模式静态类图 三.多例模式代码 ...

  5. java 连接多实例_Java如何连接多实例SQL Server?

    异常产生 Java连接SQL Server一般字符串:jdbc:sqlserver://127.0.0.1:1433;DatabaseName=数据库名; 大家应该知道:如果机器上安装的是SQLSer ...

  6. java的继承实例_java继承(实例讲解一)

    Java继承(Java inheritance) Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类.这种技术使 ...

  7. java 类继承实例_java继承例子代码,java类的继承示例

    下面要给大家带来的是一个java类的继承的例子,一起来看看详细的代码吧! 一.题目 1.定义一个Person类,这个类的属性有三个,分别是name.age.color. 类有构造方法给三个属性赋值. ...

  8. java子类继承错误_java继承会犯的小错误

    注意事项:阅读本文前应该先了解java的继承.本文定位为已经继承基础知识. 一:试图覆盖私有方法 先上代码 1 public classFather {2 3 private voidprint() ...

  9. java 方法继承方法_Java继承和方法重写

    这是我在研究遗产时在网上找到的一个例子. class Animal { public void move() { System.out.println("Animals can move&q ...

最新文章

  1. 基于Spark的大规模推荐系统特征工程
  2. JAVA-JSP内置对象
  3. Datawhale-零基础入门NLP-新闻文本分类Task05
  4. java国际化bundle_Java国际化(i18n)ResourceBundle类
  5. 向mysql中插入时间_Java向mysql中插入时间的方法
  6. vscode 使用手册
  7. 运营的新手先简单认识一下ASO
  8. Error:A fatal exception has occurred.Program will exit
  9. Laravel + Laragon 搭建php项目
  10. 找回密码功能 java_Java实现邮件找回密码功能
  11. 撩妹攻略话术恋爱小程序源码分享
  12. C# 遇到 R6034 Runtime Error的解决办法
  13. 融智学 作者 邹晓辉 Smart System Studied By Xiaohui Zou (今日头条公布其汉英双文简纲)
  14. 【实践与问题解决29】苹果系统如何做脚本控制手机自动手势
  15. You may need an additional loader to handle the result of these loaders.
  16. 7Z-Bat调用7z压缩所有文件
  17. 电子签章结构以及规范讲解
  18. 5G芯片大战下的“新变量”
  19. ISE 设计、综合及仿真流程
  20. python中的目录是什么_python | Linux各目录及每个目录的详细介绍

热门文章

  1. 橱柜高度与身高对照表_下一套房子装修,橱柜就照这样打,布局尺寸这么详细,不信不好用...
  2. anaconda 安装在c盘_最省心的Python版本和第三方库管理——初探Anaconda
  3. 再见安卓 鸿蒙,安卓系统:鸿蒙系统,正式再见
  4. shell的logo含义_Shell(壳牌石油)标志历史
  5. python语言打印菱形_Python打印菱形
  6. antd-react-mobile(踩坑记录)
  7. 思科网络基础之访问控制列表
  8. 【服务器】一次对Close_Wait 状态故障的排查经历
  9. 【Django】Django web项目部署(Nginx+uwsgi)
  10. c#geckofx文件流下载