java的继承实例_Java继承和多态实例
我们知道面向对象的三大特性是封装、继承和多态。然而我们有时候总是搞不清楚这些概念。下面对这些概念进行整理,
为以后面向抽象的编程打下坚实的基础。
封装的概念还是很容易理解的。如果你会定义类,那么相信你对封装的概念已经完全掌握了。下面定义的几个类,就是对数据的封装。
继承的好处是代码复用。继承的子类自动拥有父类中的所有属性和方法。所以继承已存在的类就是复用这些类的方法和域。
在此基础上,子类还可以添加一些新的方法和域,以满足新的需求。这是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继承和多态实例相关推荐
- java继承总结_java继承总结(二)
java学习笔记 1.继承 关键字: extends 在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以extends只能继承一个类. eg: public class P ...
- java 继承关键字_Java继承
继承的概念 继承是Java面向对象编程的基石,因为它允许创建分等级层次的类. 生活中的继承: 类的继承格式 class 父类{ } class 子类 extends 父类{ } 继承类型 需要注意的是 ...
- java 继承 冒号_java继承(extends)简单介绍
继承相信很多人都有听说过,继承是面向对象的三个基本特征之一,下面的话就一起通过简单的文章来对java继承进行一下了解吧. 继承和现实生活中的"继承"的相似之处是保留一些父辈的特性, ...
- java类多例_Java多例设计模式实例详解
本文实例讲述了Java多例设计模式.分享给大家供大家参考,具体如下: 一.多例设计模式定义 多例设计模式就是存在多个对象实例,供外部应用裯用,比喻数据库连接池. 二.多例模式静态类图 三.多例模式代码 ...
- java 连接多实例_Java如何连接多实例SQL Server?
异常产生 Java连接SQL Server一般字符串:jdbc:sqlserver://127.0.0.1:1433;DatabaseName=数据库名; 大家应该知道:如果机器上安装的是SQLSer ...
- java的继承实例_java继承(实例讲解一)
Java继承(Java inheritance) Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类.这种技术使 ...
- java 类继承实例_java继承例子代码,java类的继承示例
下面要给大家带来的是一个java类的继承的例子,一起来看看详细的代码吧! 一.题目 1.定义一个Person类,这个类的属性有三个,分别是name.age.color. 类有构造方法给三个属性赋值. ...
- java子类继承错误_java继承会犯的小错误
注意事项:阅读本文前应该先了解java的继承.本文定位为已经继承基础知识. 一:试图覆盖私有方法 先上代码 1 public classFather {2 3 private voidprint() ...
- java 方法继承方法_Java继承和方法重写
这是我在研究遗产时在网上找到的一个例子. class Animal { public void move() { System.out.println("Animals can move&q ...
最新文章
- 基于Spark的大规模推荐系统特征工程
- JAVA-JSP内置对象
- Datawhale-零基础入门NLP-新闻文本分类Task05
- java国际化bundle_Java国际化(i18n)ResourceBundle类
- 向mysql中插入时间_Java向mysql中插入时间的方法
- vscode 使用手册
- 运营的新手先简单认识一下ASO
- Error:A fatal exception has occurred.Program will exit
- Laravel + Laragon 搭建php项目
- 找回密码功能 java_Java实现邮件找回密码功能
- 撩妹攻略话术恋爱小程序源码分享
- C# 遇到 R6034 Runtime Error的解决办法
- 融智学 作者 邹晓辉 Smart System Studied By Xiaohui Zou (今日头条公布其汉英双文简纲)
- 【实践与问题解决29】苹果系统如何做脚本控制手机自动手势
- You may need an additional loader to handle the result of these loaders.
- 7Z-Bat调用7z压缩所有文件
- 电子签章结构以及规范讲解
- 5G芯片大战下的“新变量”
- ISE 设计、综合及仿真流程
- python中的目录是什么_python | Linux各目录及每个目录的详细介绍
热门文章
- 橱柜高度与身高对照表_下一套房子装修,橱柜就照这样打,布局尺寸这么详细,不信不好用...
- anaconda 安装在c盘_最省心的Python版本和第三方库管理——初探Anaconda
- 再见安卓 鸿蒙,安卓系统:鸿蒙系统,正式再见
- shell的logo含义_Shell(壳牌石油)标志历史
- python语言打印菱形_Python打印菱形
- antd-react-mobile(踩坑记录)
- 思科网络基础之访问控制列表
- 【服务器】一次对Close_Wait 状态故障的排查经历
- 【Django】Django web项目部署(Nginx+uwsgi)
- c#geckofx文件流下载