【java】面向对象的三大特性之一----继承

1.继承是面向对象的三大特性之一

1.1 继承的概念

类的继承就是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。j如果想要声明一个类继承另外一个类,要用extends关键字。

1.2 继承的语法

class ParentClass{

        //属性//方法//构造方法

}

class childClass extends ParentClass{

      //属性//方法//构造方法

}

例题:

class Animal{
    String name;
    void shot(){
        System.out.println("动物发出叫声");
    }
}
class Dog extends Animal{
    public void printName(){
        System.out.println("name="+name);
    }
}
public class Test {
    public static void main(String[] args) {
        Dog dog=new Dog();
        dog.name="小狗";
        dog.printName();
        dog.shot();
    }
}

在例题中,Dog继承了Animal类,于是Dog是Animal的子类,在子类中,虽然没有定义name属性和short()方法,但是却能访问这两个成员,说明:子类在继承父类的时候,会自动拥有父类所有的成员。

1.3 类的继承中,需要注意的问题

1.在java中,类只支持单继承,不允许多重继承

class A{}
class B{}
class C extends A,B{}     //C类不可以同时继承A,B类

2.多个类可以继承一个父类

class A{}
class B extends A{}
class C extends A{}     

3.在java中,多层继承是可以的,既一个类的父类可以再去继承另外的父类

class A{}
class B extends A{}    //类B是类A的子类
class C extends B{}    //类C是类B的子类,同时也是类A的子类

4.在Java中,子类和父类是一对相对的概念,也就是说一个类是某个父类的同时,也可以是另外一个类的子类。

1.4 重写父类方法

在继承关系中,子类会自动继承父类中定义的方法,但有时在继承中需要对继承的方法进行一些修改,即对父类的方法进行重写。但需要注意的是:在子类中重写的方法需要和父类被重写的方法具有相同的方法名,参数列表以及返回值类型。

class Animal{
    String name;
    void shout(){
        System.out.println("动物发出叫声");
    }
}

class Cat extends Animal{
    void shout(){
        System.out.println("喵喵……");
    }
}
public class Test {
    public static void main(String[] args) {
        Cat cat=new Cat();
        cat.shout();
    }
}

注意:子类重写父类父类方法时,不能使用比父类中被重写的方法更严格的访问权限。

1.5 super关键字

1.使用super关键字调用父类的成员变量和成员方法。

格式为:

super.成员变量;

super.成员方法(参数1,参数2…);

class Animal{
    String name="动物";
    void shout(){
        System.out.println("动物发出叫声");
    }
}
class Dog extends Animal{
    String name="犬类";
    void shout(){
        super.shout();
    }
    void printName(){
        System.out.println("name="+super.name);
    }
}
public class Test {
    public static void main(String[] args) {
        Dog dog=new Dog();
        dog.printName();
        dog.shout();
  }
}

2.使用super关键字调用父类的构造方法

格式为:

super(参数1,参数2…);

class Animal{
    public Animal(String name){
        System.out.println("我是一只"+name);
    }
}
class Dog extends Animal{
    public Dog(){
        super("小狗狗");
    }
}

public class Test2 {
    public static void main(String[] args) {
        Dog dog=new Dog();
 }
}

注意:通过super调用父类构造方法的代码必须要位于子类构造方法的第一行,并且只能出现一次;

           在子类的构造方法中一定会调用父类的某个构造方法,这时可以在子类的构造方法中通过super指定调用父类的哪个构造方法,如果没有指定,在实例化对象时,会自动调用父类的无参构造方法;所以,可以在子类的构造方法调用父类的构造方法,也可以在父类中定义一个无参的构造方法。

class Human{
    String name;
    int age;
    public Human(String name,int age){
        this.name=name;
        this.age=age;
    }
}
class Student extends Human{
    String num;
    String className;
    public Student(String name, int age,String num,String className) {
        super(name, age);
        this.num=num;
        this.className=className;
    }
    public void eat(){
        System.out.println(name+"在吃饭");
    }
}
public class Test {
    public static void main(String[] args) {
        Student student=new Student("张三",20,"o1","计科");
        student.eat();
    }
}

注意:子类中还有他自己的属性,那么子类在继承父类的构造方法时先用super继承子类中的属性,放在第一行,最后再调用自己的属性。

发布了62 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43669007/article/details/102506011
今日推荐