面向对象2(继承,抽象类)

继承的好处:

  1.1继承的出项提高了代码的复用性,提高软件开发效率;

  1.2继承的出现让类与类之间产生了关系,提供了多态的前提

继承的注意事项:

    在Java中一个类只能有一个直接父类。例如:class A{}

                        class B{}

                        class C extends A,B{},(这种写法是错误的,一个类只能继承一个父类)

    可以通过多重继承实现,如:class A{}

                 class B extends A{}

                 class C extends B{}(这种写法是合法的)

  1.3继承后子类父类成员变量的特点:

    a:子类对象调用成员变量的时候,子类自己有,使用子类的,子类自己没有则调用父类的

    b:当子类父类中出现了同名成员变量,通过this关键字进行区分

    如:

package com.zs.lx1;

public class Demo {
    private int x,y;

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }
    public void sum() {
        int x=4,y=3;
        System.out.println(x+y);//不加this时,传递的是子类自己的值,即x:4,y:3;结果为7
        System.out.println(this.x+this.y);//加this时,表示当前调用者本身的对象,当前调用者对象为Demo的对象d,d的x:5,y:5;结果为10
    }
}
package com.zs.lx1;

public class Test extends Demo{
    public static void main(String[] args) {
        Demo d=new Demo();
        d.setX(5);
        d.setY(5);
        d.sum();
    }
}

this表示调用者本身的对象

继承后子类父类成员方法的特性——>子类重写父类方法

  a:子类的对象调用方法的时候,子类自己有,使用子类自己的,子类没有的方法调用父类的;

  b:子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为override重写,复写,或者覆盖

  c:为什么重写父类的方法

      父类的方法最先存在的,那么如果项目需求改了,父类方法无法满足项目需求,但是项目中已经大量应用了该父类方法;

      如果随意改父类,那么功能就会出问题,所以要重写,在原来功能上提供更强力的功能。

方法覆盖的注意事项

    权限:子类方法覆盖父类方法,必须要保证权限大于等于父类权限;

        四大权限:public>默认=protected>private

    重载与重写对比

      重载:权限修饰符无关

         方法名:重载的两个方法名必须相同

         形参的个数不同,形参的类型不同,两者至少满足一个

         重载与返回值类型无关

      重写:权限修饰符:子类方法的权限>=父类方法的权限

         方法名:子类方法名和父类方法名必须相同;

         形参列表:子类和父类的形参列表必须相同

         返回值类型:基本数据类型:必须相同

               引用数据类型:子类方法的返回值类型与父类方法的返回值类型相同

                    或    子类方法的返回值类型是父类方法的返回值类型的子类

抽象类的产生

    分析事物时,发现了共性内容,就会向上抽取,会有这样一种特殊情况,就是方法功能声明相同,但方法功能主题不同。那么这时也可以抽取,但只抽取方法声明,不会抽取方法主体,那么此方法就是一个抽象方法。

抽象类的定义格式:

    抽象方法定义格式:

    public abstrac 返回值类型 方法名(参数);

    抽象类定义格式:

    abstract class 类名{

    }

抽象类的使用方式

  public abstract class Develop{

    public abstract void work();

    public void wo(){

      system.out.println("普通方法") 

    }

  }抽象类不能被实例化,需要new其子类;子类继承普通该方法

抽象类的特点

  抽象类和抽象方法都需要abstract修饰,抽象方法一定要定义在抽象类中。

  抽象类不可以直接创建对象。原因:调用抽象方法没有意义。

  只有覆盖了抽象类中的所有抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。

  之所以继承抽象类,更多的时在思想,是面对对象共性操作会更简单。

抽象关键字abstract不可以和哪儿些关键字共存?

   private:私有的方法子类是无法继承到的,已不存在覆盖,

       而abstract和private一起使用修饰方法,abstract既要子类去实现这个方法,而private修饰符根本无法得

       到父类这份方法。互相矛盾。

抽象类,可以没有抽象方法,可以定义带有方法体的方法,让子类继承后可以直接使用;

原文地址:https://www.cnblogs.com/Zs-book1/p/10533271.html