注意:继承主要使用的is-a关系

在子类中用一个新的方法来覆盖超类中的方法(override),需要注意的是如果子类之中的方法或者域  被覆盖时,仍然想访问superClass中的方法和域,此时必须使用super的关键字。

比如:

 class Manager extends Employee {
private double bonus;
public Manager(String n,double s,int y,int m,int d)
{
super(n,s,y,m,d);
bonus=0;
}
public double getSalary()
{
double baseSalary=super.getSalary();
return baseSalary+bonus;
}
public void setBonus(double b)
{
bonus=b;
}
}
class Employee {
private String name;
private double salary;
private Date hireDay;
public Employee(String n,double s,int year,int month,int day)
{
name=n;
salary=s;
GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
hireDay=calendar.getTime();
}
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public Date getHireDay()
{
return hireDay;
}
public void raiseSalary(double byPercent)
{
double raise=salary*byPercent/100;
salary+=raise;
}
}

其中Manager中继承了Employee,重载了其getSalary的方法,其中必须使用super.salary来访问超类中的salary域。

小结:

1.super的两种用法:一、调用超类中的构造器。二、调用访问被重载了的域或者方法。可以类比与this的用法。

2.多态(polymorphism):一个对象变量可以指示多种实际类型的现象。比如说其中的e

Manager boss=new  Manager("vaful wu",8000,1994,1,8);
boss.setBonus(5000); Employee[] staff=new Employee[3];
staff[0]=boss;
staff[1]=new Employee("aa",5000,1989,10,1);
staff[2]=new Employee("bb",4000,1990,12,3);
for(Employee e: staff)
System.out.println("name:"+e.getName()+" salary:"+e.getSalary());

e对应的是Employee和重载的Manager对象。

因此,可以将子类的引用赋值给超类,但反之不行。因为is-a的关系,比如说manger一定是一个employee(原则是:特殊到一般,复杂到简单)

2.多态和动态绑定、抽象abstract

多态指的就是一个对象变量可以指示多个实际类型,并在编译器的运行过程中,一般选择动态绑定。

编译器的一般执行过程:一、查看对象的声明类型和方法名。二、查看方法的类型的参数名和个数,三、如果不是private、static和final方法,则实现动态绑定在method table中选择最接近的方法。

使用关键字abstract可以使得抽象类中没有必要的方法或者形式上的方法:

类比于C++中的纯虚函数

public:vitrual string getDescription()=0;//c++中的类似用法

比如Person类中:

public abstract String getDescription();

但是需要注意的是abstract类不能被实例化。

3.Java中常见的4中修饰符

private:仅仅是本类可用

public:对所有类可用

protected:对本包及所有子类可用

默认(default)不要修饰符:对本包可见

4.object类

可以通过file:///D:/Java/docs/api/index.html查看文档。

5.可变参数方法(类比C语言中的可变参数函数)

/***********************Java*******/

public class PrintStream{

public PrintStream printf(String fmt. Object ... args){return format(fmt,args);}

}省略号是Java的一部分,表明这个方法可以接受任意数量的对象。实际上后者表示的是Object 数组,即Object[];

/********C语言*****************/

使用头文件stdarg.h,函数声明形式类似于type fun(int n_values,...)

例如:

</pre><pre name="code" class="cpp">float average(int n_values,...)
{
va_list var_arg;
int count;
float sum=0;
va_start(var_arg,n_values);
for(count=0;cpunt<n_values;count+=1){
sum+=va_arg(val_arg,int);
}
va_end(var_arg);
return sum/n_values;
}

1.继承(extends)、超类(superClass)、子类(subClass)的更多相关文章

  1. JavaScript 超类与子类 继承

    //超类和子类 继承的实现 function R(w, h) { var date = new Date(); this.width = w; this.height = h; this.create ...

  2. Core Java (十一) Java 继承,类,超类和子类

    Core Java (十一) Java 继承,类,超类和子类 标签: javaJavaJAVA 2013-01-22 17:08 1274人阅读 评论(0) 收藏 举报  分类: java(58) 读 ...

  3. 1-8继承extends

    什么是继承? 继承是面向对象三大特征之一.java中的继承描述的是两个类之间的关系,被继承的类称为父类,继承的类称为子类,使用extends关键字来表示.在java语言里面只支持单继承,即一个类只能有 ...

  4. JAVA之旅(六)——单例设计模式,继承extends,聚集关系,子父类变量关系,super,覆盖

    JAVA之旅(六)--单例设计模式,继承extends,聚集关系,子父类变量关系,super,覆盖 java也越来越深入了,大家加油吧!咱们一步步来 一.单例设计模式 什么是设计模式? JAVA当中有 ...

  5. Java核心技术第五章——1.类、超类、子类(2)

    继上一篇Java核心技术第五章——1.类.超类.子类(1) 6.重载解析 假如调用ClassName.Method(args) 1.编译器列出类ClassName所有名为Method的方法. 2.编译 ...

  6. Java核心技术第五章——1.类、超类、子类(1)

    1.定义子类: 关键字extends表明正在构造的新类派生与一个已存在的类.已存在的类称为超类.基类或父类:新类称为子类.派生类或孩子类.超类和子类是Java程序员最常用的两个术语(emmm~~我觉得 ...

  7. Java 继承extends、关键字super和this、多态、动态绑定

    Manager 经理  extends Employee 雇员 "is-a"(是)关系是继承的一个明显特征.每个经理都是一名雇员. 从术语的角度讲,Manager是子类,Emplo ...

  8. JS 超类和子类

    此篇由别的大神的博客与<javascript高级程序设计>一书整理而来 原博客地址:https://hyj1254.iteye.com/blog/628555 看到javascript高级 ...

  9. ES6新特性5:类(Class)和继承(Extends)

    本文摘自ECMAScript6入门,转载请注明出处. 一.类(Class) 1.基本语法 JavaScript语言的传统方法是通过构造函数,定义并生成新对象.下面是一个例子 function Poin ...

  10. JAVA构造函数在超类与子类定义鲁波总结

    1.子类无构造函数,超类无构造函数,创建的无参数的对象: 编译通过. class A { } class B extends A { } public class Testeeer { public ...

随机推荐

  1. 缺少新的栈标识:报出异常FLAG_ACTIVITY_NEW_TASK flag-是由于activity关闭之后开启一个新的acitivity时没有标识在栈中,所以需要给一个栈标识

    异常(栈里必须有activity的flag标识): 05-02 08:43:36.173: E/AndroidRuntime(3328): android.util.AndroidRuntimeExc ...

  2. 建设工程造价数据服务云平台(计价BIM)

    经过多次沟通和对招标文件的理解,招标人通过软件平台建立和使用人员库.项目库.材料设备价格库.数据库等四库的真实需求,本着招标人对“成果文件”(指造价.招标代理的计价成果),即“项目库”的计价文件,不打 ...

  3. 利用IIS部署WEB网站以及解决CSS/JS不能显示问题

    利用IIS部署WEB网站以及解决CSS/JS不能显示问题 转载声明:http://blog.sina.com.cn/s/blog_a001e5980101b4kt.html vs中正常IIS发布网站后 ...

  4. java实现二维码的生成.

    目录 1.二维码概念  2.二维码发展历史  3.二维码分类  4.二维码优缺点  5.QR Code  1.二维码又称  二维条码 (2-dimensional bar code)是用某种特定的几何 ...

  5. 4ci

  6. [HNOI2019]校园旅行

    题意 https://www.luogu.org/problemnew/show/P5292 思考 最朴素的想法,从可行的二元组(u,v)向外拓展,及u的出边所指的颜色与v的出边所指的颜色若相同,继续 ...

  7. Lumen框架使用Redis与框架Cache压测比较

    使用命令 ab -c 20000 -n 100000 'http://127.0.0.1:9050/v1/api.store.xxx'进行压测,并同时进行了交叉测试,结果如下: 高并发情况下数据目前没 ...

  8. C++对象模型复习

    本文写于2017-02-24,从老账号迁移到本账号,原文地址:https://i.cnblogs.com/EditPosts.aspx?postid=6440685 一:对象模型 C++面向对象的实现 ...

  9. jsapi 调起微信支付的的踩坑

    问题: 公众微信号调起微信支付的时候,有的时候调起支付成功,有的时候调起支付失败.利用抓包工具抓取数据显示授权和调用后台的微信预支付订单接口都成功并且都返回正确的数据.但是调起支付的时候传入的data ...

  10. React中this.setState是同步还是异步?为什么要设计成异步?

    在使用react的时候,this.setState为什么是异步呢? 一直以来没有深思这个问题.昨天就此问题搜索了一下. react创始人之一 Dan Abramovgaearon在GitHub上回答了 ...