概念:继承,是指一个类的定义可以基于另外一个已存在的类,即子类继承父类,从而实现父类的代码的重用。两个类的关系:父类一般具有各个子类共性的特征,而子类可以增加一些更具个性的方法。类的继承具有传递性,即子类还可以继续派生子类,位于上层的类概念更加抽象,位于下层的类的概念更加具体。

1.定义子类:

语法格式

[修饰符] class 子类名 extends 父类名{

  子类体

}

修饰符:public private protected default

子类体是子类在继承父类的内容基础上添加的新的特有内容,可以包含成员变量、成员方法、类、接口、构造方法等等。

举个栗子,在一个公司中,雇员是公司聘请的工作人员,经理是管理公司的一种特殊雇员,这类特殊雇员不仅拥有普通雇员的属性和方法,还有属于他自己的一些属性和方法,例如,特殊津贴。

代码如下

public class EmployeeClass{
private String name; // 名字
private int id; //公司编号
private double salary; //薪水
private String department;// 部门 public EmployeeClass(){} public EmployeeClass(String name,int id,double salary,String department){
this.name = name;
this.id = id;
this.salary = salary;
this.department = department;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public double getSalary() {
return salary;
} public void setSalary(double salary) {
this.salary = salary;
} public String getDepartment() {
return department;
} public void setDepartment(String department) {
this.department = department;
} @Override
public String toString() {
return "EmployeeClass [name=" + name + ", id=" + id + ", salary="
+ salary + ", department=" + department + "]";
} }

这是雇员类的代码,其中有四个属性,姓名,编号,工资,部门。

public class ManagerClass extends EmployeeClass{
private double specialsalary; public ManagerClass(){super();} public ManagerClass(String name,int id,double salary,String department,double specialsalary){
super(name,id,salary,department);
this.specialsalary = specialsalary;
} public double getSpecialsalary() {
return specialsalary;
} public void setSpecialsalary(double specialsalary) {
this.specialsalary = specialsalary;
} @Override
public String toString() {
return super.toString() + "\nspecialsal:" +specialsalary;
} }

这是子类,经理类,拥有一个自己的属性,特殊津贴。

2.子类对父类成员的可访问特性

子类可以继承父类的成员,但是对父类成员的访问却是由访问特性控制。

父类与子类在一个包中:不能直接访问private,但是我们可以通过具有public访问属性的成员方法来取得 父类的private成员。

父类与子类不在同一个包中:不能直接访问private和默认,但是我们可以通过具有public和protected访问属性的成员方法来取得 父类的private成员。

3.类成员方法的重载与覆盖

当子类中定义的新成员变量的名字与父类中某个成员变量名字相同时,子类会把父类中相应成员变量隐藏起来。

当子类中定义的成员方法的名字与父类中某个成员方法的名字相同时属于成员方法的重载或覆盖。

(1)成员方法的重载

在前面举到的雇员与经理栗子中,我们可以在雇员类中定义一个成员方法

public void setInfo(String name,int id,double salary,String department){
this.name = new String(name);
this.id = id;
this.salary = salary;
this.department = new String(department); }

在经理类中可以定义为:

public void setInfo(String name,int id,double salary,String department,double specialsalary){
super(name,id,salary,department);
this.specialsalary = specialsalary; }

这就是成员方法的重载

(2)成员方法的覆盖

通常有两种形式:

①在子类定义的成员方法中,首先调用父类中被覆盖的成员方法,再添加一些操作语句。

②在子类定义的成员方法中,不调用父类覆盖的成员方法,而是重新写一个语句组。这样实现了对父类的完全覆盖。当子类的某项操作与父类对象操作完全不同时,应采取这种方法实现。

栗子:

在object类中有一个判断两个对象是否相等的成员方法equals(),其代码为:

public boolean euqals(Object obj){
return (this == obj);
}

可以看到,这个成员方法是比较两个对象是否同时引用一个对象。

但是我们现在希望能够实现一个比较两个同类型的对象的内容是否相等的功能。所以我们下面设计有了一个复数类,每个复数类由一个实部和虚部组成。设计功能可以比较两个复数是否相等。代码如下:

public class ComplexNumber {
private double re;
private double im; public ComplexNumber(){re = 0.0;im = 0.0;}
public ComplexNumber(double re,double im){
this.re = re;
this.im = im;
}
public double getRe() {
return re;
}
public void setRe(double re) {
this.re = re;
}
public double getIm() {
return im;
}
public void setIm(double im) {
this.im = im;
} public boolean equals(Object otherObject){
if(this == otherObject) return true;
if(otherObject == null) return false;
if(getClass() != otherObject.getClass()) return false; ComplexNumber other = (ComplexNumber)otherObject;
if((re == other.re) && (im == other.im)) return true;
else return false;
}
public String toString(){
String str = "";
if(re != 0) str += re;
if(im == 0) return str;
if( im < 0 ) str += im +"i";
else str += " + " + im +"i";
return str;
} public static void main(String[] args) {
ComplexNumber c1,c2;
c1 = new ComplexNumber(2,3);
c2 = new ComplexNumber(2,-3.4);
if(c1.equals(c2)){
System.out.println("("+c1+") == ( " + c2 +")" );
}
else{
System.out.println("("+c1+") <> ( " + c2 +")" );
}
}
}

结果为(2.0 + 3.0i) <> ( 2.0-3.4i)

Java 对于继承的初级理解的更多相关文章

  1. 个人理解java的继承

    java的类是属于单继承的.在继承这一块上我本来有一个很大的误区,就是觉得父类中private定义的成员无法被继承.直到网上的大神给我指出private是可以被继承的,会在内存中,只是在子类的对象中不 ...

  2. Java面向对象㈡ -- 继承与多态

    Java的继承是通过extends和implement来实现的,Java不支持多继承,但是Java支持多层继承以及多实现(接口).Java继承有一个关键字super是用来指向父类.Java继承衍生出覆 ...

  3. java的继承机制

    这次我想深入探究以下java里类的继承机制.       我们知道,继承是java设计里的一个失败的地方.高司令说过:如果让他重新设计java的话,他会把继承去掉.而java里继承到底怎么了,会这么不 ...

  4. Java面向对象 继承(下)

     Java面向对象   继承(下) 知识概要:               (1)抽象类 1.1 抽象类概述                            1.2 抽象类的特点       ...

  5. Java的继承、封装与多态

    Java的继承.封装与多态 基本概念 面向对象OO(Object Oriented):把数据及对数据的操作方法放在一起,作为一个相互依存的整体,即对象. 对同类对象抽象出共性,即类. 比如人就是一个类 ...

  6. [ Java学习基础 ] Java的继承与多态

    看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...

  7. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

  8. Java工程师学习指南 初级篇

    Java工程师学习指南 初级篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...

  9. Java的继承和多态

    看了博客园里面的一个文章,关于java的继承和多态: class A ...{ public String show(D obj)...{ return ("A and D"); ...

随机推荐

  1. HDU 4587 B - TWO NODES tarjan

    B - TWO NODESTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view ...

  2. 用DirectShow实现视频採集-流程构建

    DirectShow作为DirectX的一个子集,它为用户提供了强大.方便的多媒体开接口,而且它拥有直接操作硬件的能力,这使得它的效率远胜于用GDI等图形方式编写的多媒体程序.前面一篇文章已经对Dir ...

  3. 根据Entity Framework6.X 数据生成代码(仅获取表名)

    近来学习ASP.NET MVC ,一直在看韩迎龙(Kencery)的ASP.NET MVC+EF框架+EasyUI实现权限管理.在第九节(TT模板的学习)卡住了,作者使用EF5.0做数据源,而我使用的 ...

  4. View绘制详解(五),draw方法细节详解之View的滚动/滑动问题

    关于View绘制系列的文章已经完成了四篇了,前面四篇文章主要带小伙伴们熟悉一下View的体系的整体框架.View的测量以及布局等过程,从本篇博客开始,我们就来看看View的绘制过程.View的绘制涉及 ...

  5. 使用JS制作一个鼠标可拖的DIV(二)——限制区域移动

    这次是要对上一篇的内容进行扩展. 由于需要对可拖动的 DIV 进行一个区域范围的限制,所以要给于一个容器,让可拖动的 DIV 元素不能逃出该容器的大小范围. 一.思路 1.在外层增加一个 DIV 容器 ...

  6. Debian 7.4 中配置PHP环境

    准备工作 导入密钥 wget http://www.dotdeb.org/dotdeb.gpg sudo apt-key add dotdeb.gpg 添加源 vi /etc/apt/sources. ...

  7. DataTable 的数据导出到 Excel

    如果有个DataTable类型的数据,可以这样导出到Excel中: public static void ExportToExcel(DataTable dt, string fileName) { ...

  8. js数组的操作 【转】

    用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多, 自以为js高手的自己居然无从下手,一下狠心,我学! ...

  9. [课程相关]homework-05

    零.准备工作 队伍成员:梁杰,夏天晗,谢祖三. 周五晚上吃完饭,我们就开始了讨论. 这次的要求是写服务器,客户端以及游戏结果动态显示.很明显是三个部分,我们也就顺其自然, 一人一个部分.我负责服务器, ...

  10. QP:price list 安全性设置

    1.添加职责 ORACLE PRICING ADMINISTRATOR 职责 (定价系统管理员) 2.Oracle Pricing Administrator Setup > Security ...