JAVA 面向对象-2-继承(Inheritance)

i.继承(Inheritance)

1.继承的概念

继承:在面向对象编程的过程中,通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类。

继承是面向对象编程最重要的特征之一。

继承的优点:
1). 避免大量的重复代码。 
2). 继承是功能的拓展,使得结构清晰。 更容易维护和修改。

父类:之前已有的类,也可以称基类、超类(superClass)
子类:新生的类,也可以叫派生类。

1.子类会继承父类的一切(不包括private修饰的私有类)方法和属性。
2.Java中只能单继承,通过extends进行继承。

测试设计:一个对象有(has a)一个属性,一个对象执行(does)一个行为。

2.使用“is a”关系判断继承

当使用继承时,如果说,子类“is a(是一个)”父类,成立。那么继承关系就是对的。

3.类的继承(extends)

"3W" , "1H":

What:在java中对父类方法和属性的继承 —— 功能拓展
Where:出现大量重复代码的时候
Why:避免大量重复代码,使代码结构清晰,更容易维护和修改。
How: 使用关键字extends继承父类。

1)父类(基类/superClass):为子类提供可继承的属性和方法。

代码示例:

public class Pet {
    String name;
    int age;
    String color;
    public Pet(){
        System.out.println(处在构造函数中);
    }/**带入参数的形式:
*   public Pet(String name){
*       System.out.println(name);
*   }*/
    public void show() {
    }
}

2)子类:子类会继承父类的一切(不包括private修饰的私有类)方法和属性。

代码示例:

public class Cat extends Pet{
    public Cat(){
        super();   // ---------------------  调用父类的无参构造函数
        //或者 super(name);   ------------   调用父类的有参构造函数
        System.out.println("喵喵要吃鱼");
    }
    @Override
    public void show(){
        System.out.println(name+","+age);
        System.out.println("喵喵喵");
    }
} 

1.Java中只能单继承,通过extends进行继承。

2.如果父类有参数,子类也必须有参数,并返回给父类。否则无法程序执行

3.this();super(); 是冲突的,它们都必须放在第一行才能生效。

4.单继承与多继承

某些OOP语言,如C++,允许多个继承。
但是Java中只能允许单继承,通过extends进行继承。
所以,每个Java类只有一个父类。

5.所有类的根类

java语言API中有一个特殊类Object,是整个Java类层次中的根类。
Object类是每一个Java类的父类(直接父类或者间接父类)。所以,不管什么类类型,Object中的方法都可以被任何对象调用。

6.方法的重载与重写

1)重载:只与参数的个数和类型有关。构造函数也能重载

代码示例:

public void show(int a){
  System.out.println(a);
}
public void show(int a,int b){
  System.out.println(a+b);
}
public void show(int a,double b){
  System.out.println(a+b);
}  

重载可以针对同种行为的不同情况,方便处理。

2)重写:子类可以重写从父类继承的方法,从而允许子类添加或者改变父类中方法的行为,是OOP特征之一。

◇规则:

a. 子类的方法的返回值类型、方法名和形式参数列表,必须和父类相同。
b. 访问修饰符必须不小于父类的访问修饰符。
c. 子类中重写的异常不能抛出比父类更多的异常。

public class Pet {
    String name;
    int age;
    String color;
    public Pet(){
        System.out.println(处在构造函数中);
    }
/**带入参数的形式:
*   public Pet(String name){
*       System.out.println(name);
*   }
*/
    public void show() {
    }
}

public class Cat extends Pet{
    public Cat(){
        super();    //  -----------------------  调用父类的无参构造函数
        //或者 super(name);   ------------   调用父类的有参构造函数
        System.out.println("喵喵要吃鱼");
    }
    @Override
    public void show(){
        System.out.println(name+","+age);
        System.out.println("喵喵喵");
    }
}

1.重写的方法名字和参数必须一模一样。一定发生在父类和子类之间。 
2.当父类的方法不适合子类时,就需要重写。

7.super关键字

1)this引用:每个对象都有一个对自身的引用,this引用。
2)super引用:一个类则可以使用super关键字显式引用从父类继承的成员变量和方法。同时如果有参数,会将参数传递给父类。

1.在子类重写父类方法的时候,如果需要调用父类的方法,就需要使用super关键字。 
2.this和super关键字都必须写在代码第一行,所以只能选择一个。

8.final关键字

1)final常量:不能修改其中的值。

2)final类:一个类可以声明为最终类。最终类不能被其他类继承。

public final class Dog extends Pet{}

3)final方法:一个方法可以声明为最终方法。最终方法不能被重写。

public class Pet{
    String name;
    int age;
    public final void show(){}
    System.out.println(name+“, ”+age);
} 

9.实例化的过程

当一个对象被实例化时:
1)new运算符调用子类的构造器
2)子类会用this关键字调用子类的其他构造器。最后,子类中的第一行代码中不是this()的构造器将被调用。 
3) 在子类的构造器中的任何语句执行前,父类的构造器必须用super关键字调用。如果没用显式使用super调用,编译器会用super()调用无参数的父类构造器。 
4)如果父类也是另一类的子类,那么在父类的构造器中的任何语句执行前,父类构造器必须使用super调用更高一层父类的构造器。 
5)本过程继续执行,直到到达类层次树的顶部,即Object类。
6)Object类中的构造器执行,然后控制流程转到继承层次树中Object下面的类的构造器中。
7)构造器沿着继承层次树向下执行,最后一个要执行的构造器,实际上是第一步中先调用的那个构造器。

在每个构造器中,如果要调用super()或this(),那么调用代码必须是构造器的第一行代码

时间: 2024-10-09 02:15:41

JAVA 面向对象-2-继承(Inheritance)的相关文章

Java 语法 索引 ----- 继承(Inheritance) 和重写(Overriding)

// Superclass (parent class) class Fruit{ public String flavor; } // Subclass (child class) class Apple extends Fruit { public String variety; } //downcasting Apple a = new Apple(); Fruit f = a; Apple c = (f instanceof Apple) ? (Apple)f : null; 重写 cl

08 Java面向对象之继承

JavaSE 基础之八 08 Java面向对象之继承 ① 对象与对象之间的关系 关联关系:最弱的一种关系(学生类中包含了老师) 继承关系:比较强的一种关系,is-a,你能够用:什么是什么说通 聚合关系:比较强的关系,聚集和组合,什么是什么的一部分 实现关系:子类要去实现父接口 ② 继承的语法实现 class Animal{ } class rabbit extends Animal{ // rabbit称为子类,Animal称为父类 } ③ 继承的特性 子类继承父类,子类可以拥有父类的所有属性(

Java面向对象的继承

继承也是面向对象的又一重要特性,继承是类于类的一种关系,通俗来说狗属于动物类,那么狗这个类就继承了动物类 java中的继承是单继承的,一个类只能继承与一个父类 子类继承父类之后,子类就拥有了父类的所有属性和方法,private的除外,优点就是可以提高代码的复用性,简单的继承实例如下: 1 public class Dog extends Animal { 2 //Dog类继承了Animal类中的所有非私有的属性和方法,可以直接使用了 3 } 使用继承还是挺简单的 方法重写 如果子类对继承父类的方

JavaSE入门学习15:Java面向对象之继承

今天我们来看Java三大面向对象特性中的继承. 一Java继承 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类.继承可以理解为一个对象从另一个 对象获取属性的过程. 如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类C是从类A继承而来的.在Java中,类的继 承是单一继承,也就是说,一个子类只能拥有一个父类. 继承中最常使用的两个关键字是extends和implements.这两个关键字的使用决定了一个对象和另一个对象是否是 IS-A(是一个)关系.通过使

Java面向对象之继承

Java 中的继承规则: 1.子类继承父类所有的成员变量和成员方法,但是不能继承父类的构造方法. 2.子类虽然继承了父类的成员变量,但是子类不能直接访问父类的私有变量,可以通过getter/setter()方法进行访问 3.子类对父类构造函数的调用规则: a.子类的构造方法首先必须调用父类的构造方法. b.如果没有显示指定,子类的构造方法会默认的调用父类中的无参构造方法, 1 public class Animal { 2 public Animal() { 3 System.out.print

Java 面向对象之继承从哪来,为什么用,怎么用?

首先看一张图片: 现在有两个类,Student和Worker,为了提高复用性.只建立一份代码,让一个类和另一个类产生关系就可以了,这种关系就是:继承. 但我们发现这两个类没有继承关系,但是它们有共性的内容,我们可以找到它们的共享类型,→无论是学生还是工人,都是Person,Person都具备着name和age.即: 在代码中通过关键字 继承(extends),让学生和工人与Person产生关系 class Person { String name; int age; } class Studen

Java面向对象,继承,多态

1,继承 Java 中通过 extends 关键字可以继承一个类,implements可以继承多个接口.继承允许创建等级层次的类. 继承的机制提高了代码的复用性,让类与类之间产生了关系,有了这个关系,才有了多态的特性. 注:Java支持单继承,但是可以多层继承. 子类可以拥有父类的非private的方法和属性,子类可以继承父类的方法,也可以重写父类的方法,还可以对父进行拓展. 增加了类之间的联系,即提高了耦合. 一般格式为: class 父类 { } class 子类 extends 父类 {

Java面向对象练习题继承之点和矩形

按要求编写一个Java应用程序: (1)编写一个矩形类Rect,包含: 两个protected属性:矩形的宽width:矩形的高height. 两个构造方法: 1.一个带有两个参数的构造方法,用于将width和height属性初化: 2.一个不带参数的构造方法,将矩形初始化为宽和高都为10. 两个方法: 求矩形面积的方法area() 求矩形周长的方法perimeter() (2)通过继承Rect类编写一个具有确定位置的矩形类PlainRect,其确定位置用 矩形的左上角坐标来标识,包含: 添加两

java面向对象(继承)

一.继承的概念 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为. 在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法 二.类继承的格式 通过 extends 关键字可以申明一个类是从另外一个类继承而来 class 父类 { } class 子类 extends 父类 { } /* * 定义员工类Employee */ c