Java OOP之继承和方法重写(override)
2017-05-13 19:31
281 查看
一、继承
1、定义: 继承是类与类之间的一种关系,是一种” is a” 的关系
例如 : 狗是动物 ,我们就理解成狗类继承动物类。继承的类称为子类,被继承的类称为父类。
2、Java是单继承: 一个类最多只能有一个父类。
Java 支持多层次继承,也就是说,C继承B,B继承A,C也是A的子类。
注意: 同时,一个类可以有多个子类。(多态)
3、继承的优点
1) 子类拥有父类的所有属性和方法
备注: 如果父类的方法和属性由private修饰符修饰,则子类无法继承。换个说话,子类无法方位到该属性和方法
2)实现代码的复用
4、继承的语法
二、操作说明
我们创建Animal 类,定义如下:
定义一个Dog类,继承Animal类,我们看下如何操作
点击Browse
确定后点击finsh
继续创建个类,并勾选main函数
输出结果:
三、方法重写
如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时,会优先调用子类的方法。
语法规则 : 返回值类型、方法名、参数类型和参数个数都要与父类继承的方法相同
例如,我们在Dog类重写eat()方法如下,其他代码保持不变化,我们继续看下输出结果
输出结果:
注意 : Java 方法的重写要遵循 “两同两小一大”原则(作为了解吧,记住一模一样即可) :
1 > 两同 : 方法名 和 形参列表相同
2 > 两小 :
子类方法返回值类型应比父类的返回值类型更小或者相等
子类方法声明抛出的异常类比父类方法声明抛出的异常类更小或相等,当父类抛出多个异常,子类方法只能是其子集、
3> 一大 : 子类方法的访问权限应比父类方法更大或相等
特别注意 : 覆盖方法和被覆盖方法 要么都是 类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。
四、组合优先继承
继承是实现类重用的重要手段,但是继承会破坏封装性。相比之下,在Java中通过组合也可以实现类重用,而采用组合方式来实现重用能提高更好的封装性。
如果需要复用一个类,除了把这个类当成基类来继承之外,还可以把该类当成另外一个类的组成部分,从而允许新类直接复用该类的public方法。不管是继承还是组合,都允许在新类(对于继承来说是子类)中复用旧类方法。对于继承来说,子类可以直接获取父类的public方法,当程序在使用子类的时候,可以直接访问该子类从父类那继承到的方法,而组合能够把旧对象作为新类的属性嵌入,用于实现新类功能。我们看到的只是新类的方法,而不能看到嵌入在对象中的方法。因此,通常需要在新类里使用private来修饰嵌入的旧类对象。
五、重写三条规则
1、方法重写是建立在继承的继承上,没有继承关系为前提,就不存在方法重写一说
2、当父类方法的修饰符为private,在其子类是不能被重写的
3、子类重写父类的方法时,子类方法的访问修饰符权限要大于等于父类方法的访问修饰符
demo下载地址
1、定义: 继承是类与类之间的一种关系,是一种” is a” 的关系
例如 : 狗是动物 ,我们就理解成狗类继承动物类。继承的类称为子类,被继承的类称为父类。
2、Java是单继承: 一个类最多只能有一个父类。
Java 支持多层次继承,也就是说,C继承B,B继承A,C也是A的子类。
注意: 同时,一个类可以有多个子类。(多态)
3、继承的优点
1) 子类拥有父类的所有属性和方法
备注: 如果父类的方法和属性由private修饰符修饰,则子类无法继承。换个说话,子类无法方位到该属性和方法
2)实现代码的复用
4、继承的语法
class 子类名 extends 父类名 { }
二、操作说明
我们创建Animal 类,定义如下:
public class Animal { //声明如下两个属性 public String name; private int age; //定义一个行为 public void eat(){ System.out.println("动物具有吃东西的能力"); } }
定义一个Dog类,继承Animal类,我们看下如何操作
点击Browse
确定后点击finsh
继续创建个类,并勾选main函数
public static void main(String[] args) { //创建dog对象 Dog dog = new Dog(); //或者 Animal dog = new Dog(); //访问dog对象的name属性 dog.name = "rose"; //访问dog对象的age属性(父类Animal的age属性是用private修饰,Dog并没有继承age这一属性) //dog.age = 15; //访问dog对象的eat()方法 dog.eat(); }
输出结果:
动物具有吃东西的能力
三、方法重写
如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时,会优先调用子类的方法。
语法规则 : 返回值类型、方法名、参数类型和参数个数都要与父类继承的方法相同
例如,我们在Dog类重写eat()方法如下,其他代码保持不变化,我们继续看下输出结果
public class Dog extends Animal { //重写父类的eat()方法 public void eat(){ //super.eat();如果作为扩展,狗除了吃,还可以喝。就可以直接这么做。注意,这里的super不能省略,否则就递归了。 System.out.println("狗具有吃东西的能力"); } }
输出结果:
狗具有吃东西的能力
注意 : Java 方法的重写要遵循 “两同两小一大”原则(作为了解吧,记住一模一样即可) :
1 > 两同 : 方法名 和 形参列表相同
2 > 两小 :
子类方法返回值类型应比父类的返回值类型更小或者相等
子类方法声明抛出的异常类比父类方法声明抛出的异常类更小或相等,当父类抛出多个异常,子类方法只能是其子集、
3> 一大 : 子类方法的访问权限应比父类方法更大或相等
特别注意 : 覆盖方法和被覆盖方法 要么都是 类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。
四、组合优先继承
继承是实现类重用的重要手段,但是继承会破坏封装性。相比之下,在Java中通过组合也可以实现类重用,而采用组合方式来实现重用能提高更好的封装性。
如果需要复用一个类,除了把这个类当成基类来继承之外,还可以把该类当成另外一个类的组成部分,从而允许新类直接复用该类的public方法。不管是继承还是组合,都允许在新类(对于继承来说是子类)中复用旧类方法。对于继承来说,子类可以直接获取父类的public方法,当程序在使用子类的时候,可以直接访问该子类从父类那继承到的方法,而组合能够把旧对象作为新类的属性嵌入,用于实现新类功能。我们看到的只是新类的方法,而不能看到嵌入在对象中的方法。因此,通常需要在新类里使用private来修饰嵌入的旧类对象。
五、重写三条规则
1、方法重写是建立在继承的继承上,没有继承关系为前提,就不存在方法重写一说
2、当父类方法的修饰符为private,在其子类是不能被重写的
3、子类重写父类的方法时,子类方法的访问修饰符权限要大于等于父类方法的访问修饰符
demo下载地址
相关文章推荐
- JAVA菜鸟入门篇 - 面向对象三大特征之一:继承 ,方法重写(override)和Object类 (十四)
- java学习之路 之 高级类特性1-面向对象特征之二:继承及方法重写(override)
- JAVA中继承时方法的重载(overload)与重写/覆写(override)
- Java 子类继承父类方法的重写(或者覆盖,override)
- C#下 子类继承父类的虚方法后 使用override重写父类方法 和 不使用override重写有什么区别?
- java方法的重载(Overload)与重写(Override)
- 简单的java实验,涉及到 类继承以及接口问题,方法体的重写(区别于重载)
- java方法的重载(Overload)与重写(Override)
- java基础---方法的重载(overload)和覆盖(重写)(override)
- java继承 子类重写父类方法
- [2014-03-07]JAVA笔记_继承、方法重写
- java中静态(static)的方法为什么不能重写(override)
- java 继承 多态(override->重写(=覆盖)、overload->重载、polymorphism -> 多态)
- 【java】Java的继承,方法重写,访问权限
- static的继承:静态方法只能隐藏(hidden),不能重写(override)
- java 继承 方法重写 自动转型 多态 接口 抽象类
- java方法的重载(Overload)与重写(Override)
- Java中的类成员访问控制符和继承重写父类的方法时的类成员访问控制符的相关问题
- java 继承 方法重写 自动转型 多态 接口 抽象类