Java中类的继承

712 阅读3分钟

一、子类继承父类的写法

class 子类名 extends 父类名{}

二、子类与父类之间的关系

①父类可以有个子类

②子类只能有一个父类

③子类会继承父类的一些属性和方法

④子类在创建对象时,会先调用父类的构造方法6

三、四大权限修饰符

              继承            非继承
同一个包不同包同一个包不同包
private
缺省
protected
public

上面的对错仅代表能否调用。

其实子类继承父类之后,创建子类对象,会对父类无法调用的属性也分配空间。但是无法调用。

四、instanceof关键字

对象    instanceof    类名

如果此对象是该类的对象,或者是该类的子类的对象,则返回true

否则返回false

如图:Person为Teacher 和 Student的父类
现在创建一个zhang为Person的对象
创建一个peng为Teacher的对象
创建一个liu为Student的对象
问:
    zhang instanceof Person
    zhang instanceof Teacher
    peng instanceof Teacher
    peng instanceof Person
    liu instanceof Teacher
五条表达式结果如何?

五、this和super关键字

①this代表当前类

②super代表父类

this()和super()可以分别调用子类和父类的空参构造器

如图:Person为Teacher 和 Student的父类

问:在Student这个类中,this.id 代表的是?super.id代表的是?

六、成员变量的隐藏和方法的重写

1、成员变量的隐藏

public class Person{
    int age;
}

public class Student extends Person{
    int age;//String age;
}

2、方法的重写(区别于方法的重载)

public class Person{
    public void walk() {    System.out.println("人走路!");}
}

public class Student extends Person{
    public void walk(){    System.out.println("学生走路");}
}

注意:子类重写的方法的权限修饰符的权限大小不能小于父类。

如:Person的walk方法是public,那么子类Student的walk方法只能是public,而不能是其他。

七、final关键字

1、final类

public final class Student{}

问:Student能否被继承?

2、final方法

public final void walk(){}

问:walk方法可以被继承吗?

    walk方法可以被重写吗?

3、final变量(常量)

public final double PI = 3.1415926;

问:PI可以被修改吗?

八、上转型对象

1、上转型对象不能操作子类新增的成员变量,不能调用子类新增方法

2、上转型对象可以调用被继承的变量,以及被隐藏的变量。也可以调用被继承的方法和被重写的方法。

如图:Person是Student的父类。
    Person p;
    //p = new Person();
    p = new Student();

问:
    p.id调用的是哪个类的id?
    p.walk()调用的是哪个类的walk?

九、abstract关键字(抽象)

1、abstract类

abstract class A{}

2、abstract方法

abstract void walk();//只有声明,没有方法体

3、注意点:

①abstract 类中可以有abstract方法,也可以有非abstract方法

②abstract方法一定存在于abstract类中,且abstract方法没有方法体。即没有花括号{},这一部分

③如果一个非abstrac类继承了abstract类,那么就需要重写abstract类中的abstract方法,并加上方法体。如果是一个abstract类继承了abstract类,那其中的abstract方法可重写可不重写。

④abstract类不能用于声明对象。

⑤abstract类可以声明上转型对象。

问:
1、为什么非抽象类继承抽象类一定要重写抽象方法?

2abstract class A{}

abstract class B extends B{}

A a = new B();//对吗?

3abstract可以和final一起使用吗?

十、多态

public abstract class Animal{
    abstract public void yell();
}

public class Dog extends Animal{
    public void yell() {    System.out.println("汪");}
}

public class Cat extends Animal{
    public void yell() {    System.out.println("喵");}
}