java 基础 3 --继承、重写

原创 2016年08月30日 17:59:01
1.继承是一种由已有的类创建新的类的机制。利用继承,可以先定义一个共有属性的一般类,根据该一般类再定义具有特殊属性的子类,子类继承一般类的属性和行为,并根据需要增加它自己的新属性和行为。
【注:java不支持多重继承,即子类只能有一个父类。子类与父类的关系是“is-a”关系。】

2.类有两种重要的成员:成员变量和方法。

3.当父类和子类在同一个包时,可以继承父类用 private/protected 修饰符 修饰的成员变量和方法,不在同一包中将不能继承。

4.在子类继承的方法只能操作子类继承和隐藏的成员变量,子类新定义的方法可以操作子类继承和子类新生明的成员变量,但无法操作子类隐藏的成员变量(需要使用super关键子操作子类隐藏的成员变量。)

5.方法重写(覆盖):
a. 如果子类可以继承父类的某个方法,那么子类就有权重写这个方法。
b. 方法的重写是指:子类中定义一个方法,这个方法的类型和父类的方法类型一致(或者父类的方法的类型的子类型),并且这个方法的名字、参数个数、参数类型和父类的方法完全相同。
c. 重写的目的:
1.子类通过重写可以隐藏继承的方法;子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。
2.重写方法既可以操作继承的成员变量和调用继承的方法,也可以操作子类声明的成员变量、调用新定义的其他方法,但无法操作隐藏的变量和方法。【操作隐藏的变量和方法可以通过super 进行操作!!!】
d. 在重写父类的方法时,不允许降低方法的访问权限,但可以提高访问权限。
访问权限由高到低:
public--protected--友好的--private。
注:在java中,如果方法前没有访问权限的修饰,默认是 友好的 。
e.在JDK 1.5 版本以后,子类允许重写方法的类型可以是父类方法类型的子类型。
例:

class A{
Object get(){
return null;
}
}

class B extends A{
Integer get(){ //Integer是Object的子类
return new Integer(100);
}
}

public class Test {
public static void main(String[] args) {

B b = new B();
Integer t = b.get();
System.out.println(t.intValue());
}

}

输出结果:100
【拓展:
inValue的使用:
1.intValue()是java.lang.Number类的方法,Number是一个抽象类。Java中所有的数值类都继承它。也就是说,不单是Integer有intValue方法,Double,Long等都有此方法。
2.此方法的意思是:输出int数据。每个数值类中具体的实现是不同的。
例如:
Float类和Double类的intValue方法,就是丢掉了小数位,而Long的intValue方法又不一样的。


最后用例子进行一下总结:
【继承、重写的例子】

class University{
void enterRule( double math,double enghlish, double chinese){
double total = math+enghlish+chinese;
if (total>=180) {
System.out.println(total+":分数达到大学分数线!");
}else{
System.out.println(":分数未达到大学分数线!");
}
}
}

class ImportantUniversity extends University{
void enterRule( double math,double enghlish, double chinese){
double total = math+enghlish+chinese;
if (total>=220) {
System.out.println(total+":分数达到名牌大学分数线!");
}else{
System.out.println(total+":分数未达到名牌大学分数线!");
}
}
}


public class Test {
public static void main(String[] args) {

double math = 6, enghlish = 50, chinese = 95;
ImportantUniversity iu = new ImportantUniversity();
iu.enterRule(math, enghlish, chinese);//调用重写的方法
System.out.println("");
math=59;
enghlish=86;
chinese=80;
iu.enterRule(math, enghlish, chinese);//调用重写的方法
}

}
输出结果:
151.0:分数未达到名牌大学分数线!

225.0:分数达到名牌大学分数线!

版权声明:本文为博主原创文章,未经博主允许不得转载。

java基础之三大特性 类的继承和方法重写

1 类的继承 2 方法的重写 类的继承 public class Student extends Person{ public String school; }Stud...
  • xiaozhaorui
  • xiaozhaorui
  • 2016年07月17日 08:47
  • 342

java中的继承和多态以及重载和重写

继承(inheritance) 简单的说,继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(下面会讲到,这种方式叫重写)的方式,产生一个新的类型。继承是面向对象的三个基本特征--封...
  • ls5718
  • ls5718
  • 2016年06月02日 10:19
  • 2890

java 继承中的重写父类方法

重写父类方法子类扩展(extends)了父类,子类是一种特殊的父类。子类可以获得父类所有的属性和方法,达到代码复用的目的。子类总以父类为基础增加新的属性和方法。但是有时候我们还需要重写(覆盖)父类的方...
  • fly_zxy
  • fly_zxy
  • 2015年05月10日 16:49
  • 8464

Java小记之方法重写与继承中的构造方法的规则

方法重写: 具有相同的方法名称,返回类型和参数列表(特别容易出错) 重写方法不能使用比被重写方法更严格的访问权限。 super关键字,来引用基类成分: class FatherClass{ }...
  • AllisonLiu
  • AllisonLiu
  • 2016年11月20日 21:43
  • 1775

在继承中重写方法时抛出异常的问题

要清楚的知道子类重写父类的方法时,当父类抛出异常时,子类抛出的异常需要怎么写,首先必须了解异常的类型。 Exception 这种异常分两大类运行时异常和非运行时异常(编译异常)。 运行时异常:都是Ru...
  • hurahura
  • hurahura
  • 2016年10月18日 23:07
  • 1774

继承、多态,重载、重写的区别与总…

继承、多态,重载、重写的区别与总结 一道必考的JAVA核心面试题,什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承、多态、重载和重写。 ...
  • li19236
  • li19236
  • 2014年11月25日 18:10
  • 1867

Java——继承、枚举

关于继承的基本知识就不赘述了。关键字:extends,单继承,方法重写,super,this,final,子类父类,抽象类等。继承 多态 一个对象变量可以指示多种实际类型的现象被称为多态。 子类的...
  • qq_29423883
  • qq_29423883
  • 2017年07月05日 12:59
  • 159

C#与java中对抽象类、接口的继承和重写区别

C#: 一、继承 什么是继承:继承是允许重用现有类去创建新类的过程。分类的原则是一个类派生出来的子类具有这个类的所有非私有的属性。 1、继承C#中的类:C#不支持多重继承,C#类始终继承...
  • nma_123456
  • nma_123456
  • 2015年06月02日 11:39
  • 1387

java 接口 抽象类 继承 重载 重写 多态

4.1 抽象类          在面向对象领域由于抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能实例化的。      同时,抽象类体现了数据抽象的思想,是实现多态的一...
  • u012803478
  • u012803478
  • 2016年07月16日 23:41
  • 1299

java类方法继承为什么其修饰词的范围不能越来越小

关于类的继承大家可能知道如题目所说的这一条规则,但是可能有些人没有太注意去理解为什么,网上有没有相关的解释,我自己在这里只是提出相关概念并强行解释一番,“合不合胃口”大家自行取舍。 类在继...
  • jumprn
  • jumprn
  • 2017年05月21日 18:23
  • 278
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 基础 3 --继承、重写
举报原因:
原因补充:

(最多只允许输入30个字)