方法重写与继承

                                                                                       继承

继承的概念:如果多个类中存在相同属性和行为时,就可以将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行 为,只要继承那个类即可。

格式:class 子类名 extends 父类名 {} 

例:

 父类:

public class Animal {

    Animal(int age,String name){
        this.age=age;
        this.name=name;

    }
   private int age;
    private String name;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

   
    public void run(){
        System.out.println("跑步");

    }
}

子类:

public class Cat extends Animal {
    Cat(int age,String name){
        super(age,name);
    }
   
}

子类:

public class Dog extends Animal {
     Dog(int age,String name){
        super(age,name);
    }
}

测试类:

public class Demo1 {
    public static void main(String[] args) {
        Dog dog = new Dog(1,"盖伦");
        Cat cat = new Cat(4,"剑圣");
        System.out.println("狗的名字为"+dog.getName());
        System.out.println("狗的年龄为"+dog.getAge());
        dog.eat();
       
        System.out.println("---------------------------------");
        System.out.println("猫的名字为"+cat.getName());
        System.out.println("猫的年龄为"+cat.getAge());
        cat.run();
      



    }
}

输出为:

狗的名字为盖伦
狗的年龄为1
跑步
---------------------------------
猫的名字为剑圣
猫的年龄为4
跑步
 

继承的好处:提高了代码的复用性和维护性,使类与类之间产生关系,是多态的前提。

继承的弊端:类的耦合性提高了。

开发的原则:高内聚,低耦合。
                      耦合:类与类的关系。
                       内聚:就是自己完成某件事情的能力。

Java里继承的特点:只支持单继承,不支持多继承,但支持多层继承。

需注意的事项:子类只能继承父类所有非私有的成员;子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构                             造方法;不要为了部分功能而去继承。

继承中成员变量/方法的关系:若子类成员变量/方法名与父类相同,则执行以下步骤:在子类的方法的局部范围找,有就使用;在子类的成员范围找,有就使用; 在父类的成员范围找,有就使用;如果还找不到,就报错。

super关键字何时使用:当子类局部范围需要访问父类变量时。

 super关键字代表的是父类储存空间的标识。

继承中的构造方法:

          子类中所有的构造方法默认都会访问父类中空参数的构造方法。

           原因:因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始                       化。

           注意:若父类中没有无参构造方法,则子类应:1.在父类中添加一个无参的构造方法。

                                                                                       2.子类通过super去显示调用父类其他的带参的构造方法。

                                                                                       3.子类通过this去调用本类的其他构造方法,本类其他构造也必须首先访                                                                                               问了父类构造。

例:

public class GrandFather {
    GrandFather(){

    }
    int a1=1;
    int a2=2;
    int b1=1;
    int b2=0;
}

public class Father extends GrandFather {
    Father(){

    }

    public int add(int a1,int a2){
        return a1+a2;
    }
    public int reduce(int b1,int b2){
        return super.b1-super.b2;

    }
}

public class Son extends Father{
    public static void main(String[] args) {

        Son son = new Son();
        Son son1 = new Son();
        System.out.println(son.add(3,4));
        System.out.println(son1.reduce(4,2));
    }
}

输出结果为:7
                     1

分析:Father类中的add方法使用的是传入的数据,reduce方法使用的是父类中的参数。


                                                                                     方法重写

何时使用:子类中出现了和父类中一模一样的方法声明(方法名,参数列表,返回值类型),也被称为方法覆盖,方法复写。

应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。 这样,即沿袭了父类的功能,又               定义了子类特有的内容。

注意:父类中的私有方法不能被重写;子类若要重写,权限不能比父类低。

例:

public class Animal {

public void eat(){
    System.out.println("吃饭");

}

}


public class Cat extends Animal {
    public void eat(){
        System.out.println("猫吃鱼");
    }
}

public class Dog extends Animal {
    public void eat(){
        System.out.println("狗吃骨头");
    }
}

public class Demo1 {
    public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
dog.eat();
cat.eat();

}

}

输出为:狗吃骨头

               猫吃鱼

final关键字:

                作用:有时候我们不想让子类去重写父类的方法.这时就需要使用 final关键字。

                作用范围:可以修饰类,变量,成员方法。

                 特点:被final修饰的类不能被继承;被修饰的方法不能被重写;被修饰的变量不能被重新赋值。

                  注意:若修饰的是基本类型,则是数值不变;弱修饰引用类型,则是地址值不变

猜你喜欢

转载自blog.csdn.net/weixin_43790249/article/details/84980403