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

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. VS2015创建的Asp.net WebApi默认项目在CentOS7+Mono4.2.2+jexus5.8运行不起来的解决方案

    主要原因是Web.config配置的问题. 修改成如下内容: <?xml version="1.0" encoding="utf-8"?> < ...

  2. 【经验记录】Android上传文件到服务器

    Android中实现上传文件,其实是很简单的,和在java里面是一样的,基本上都是熟悉操作输出流和输入流!还有一个特别重要的就是需要配置content-type的一些参数!如果这些都弄好了,上传就很简 ...

  3. iOS开发——总结篇&常用开发总结

    一.通知1.监听通知 - (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(i ...

  4. QQWry.dat 数据写入

    纯真IP库 数据多,更新及时,很多同学在用,网上关于其读取的帖子也有不少(当然其中有一些是有BUG的),但却很少有关于其写入的帖子.OK,下面分享下写QQWry.dat. QQWry.dat 分三个部 ...

  5. SMI接口,SMI帧结构,MDC/MDIO

    转载:http://blog.csdn.net/zyboy2000/article/details/7442464 SMI全称是串行管理接口(Serial Management Interface). ...

  6. android 编写动画

    1.在编写动画的时候需要新建一个xml 新建的步骤是选中res单击右键选择Android resource file 然后弹出一个框 ,然后再Resource Type 里面选择Animation 然 ...

  7. xmpp搭建服务器

    二.环境配置1.安装mysql2.修改mysql的帐户的密码>sqlite(移动平台) ,是没有密码直接连接数据库>mysql sqlServer (服务端的数据库) 是有帐户和密码  默 ...

  8. ubuntu14_pip 安装

    1:install pip python-dev    sudo apt-get install python-dev    sudo apt-get install libevent-dev     ...

  9. Spring 事务管理高级应用难点剖析--转

    第 1 部分 http://www.ibm.com/search/csass/search/?q=%E4%BA%8B%E5%8A%A1&sn=dw&lang=zh&cc=CN& ...

  10. Scala的基本语法总结

    Scala的函数: 目前博客园中的代码编辑器中还不支持Scala语言....用的Java代码的存储方式 object TestScala { def main(args: Array[String]) ...