JavaSE基础(25) 抽象类

程序是用来模拟现实世界、解决现实问题的;

现实世界中存在的都是“动物”具体的子类对象,并不存在“动物”对象,所以,Animal不应该被独立创建成对象。

将子类的共同特征进行抽取,抽象成一个父类。如果有的功能在父类中定义了,但是没有具体的实现,那么可以定义为抽象的。等待子类实现即可。

作用:

        可被子类继承,提供共性属性和方法。

        可声明为引用,更自然的使用多态。

抽象类 :包含抽象方法的类;

        被abstract修饰的类,称为抽象类;

        抽象类意为不够完整的类、不够具体的类;

抽象方法 : 没有方法体的方法。

抽象类与抽象方法的定义

抽象方法定义的格式

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

抽象类定义的格式

public abstract class 类名 {}

示例1:

//研发部员工
public abstract class Developer {
    public abstract void work();//抽象函数。需要abstract修饰,并分号;结束
}

//JavaEE工程师
public class JavaEE extends Developer{
    public void work() {
        System.out.println("正在研发淘宝网站");
    }
}

//Android工程师
public class Android extends Developer {
    public void work() {
        System.out.println("正在研发淘宝手机客户端软件");
    }
}

示例2:

public abstract  class Animal {//有抽象方法一定要定义成抽象类

    private String name;
    private int age;
    
    public abstract void work();//动物的工作,规定我的子类必须完成一件事
    
    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 class Cat extends Animal {
    
    @Override
    public void work() {
        System.out.println("猫去抓老鼠。。。。");
    }
}
public class Dog extends Animal {
    
    String kind;
    
    @Override
    public void work() {
        System.out.println("狗去看门。。。。");
    }
}

注意事项

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

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

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

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

抽象类不允许被实例化,因为可能包含有抽象方法,必须等待子类来继承,并且实现抽象方法。子类积极的实现父类中的抽象方法,但是如

果没有全部实现,那么子类也是抽象的,要再等子类来继承,并且实现抽象方法。

重要的结论:抽象类和类比较,除了不能实例化之外,没有任何区别

抽象类一定是个父类 ?

是的,因为不断抽取而来的。

抽象类中是否可以不定义抽象方法。

是可以的,那这个抽象类的存在到底有什么意义呢?不让该类创建对象,方法可以直接让子类去使用

abstract 一定不能和 private, static, final 同时使用.

1、抽象方法:只有方法头,没有方法体定义,也就是说抽象方法无需实现,抽象方法的意义在于子类实现,private意义在于其他类直接调用它已实现的方法。这两者搭配毫无意义(private修饰后为私有,子类不能继承,自然不能使用)

2、final用于类名前,表示类不可被继承;final用于变量前,表示它是只能一次赋值的变量,如果初始化了那就是常量,也不可被改变。和abstract 搭配无意义(final不能被重写,根本就不可能被abstract的实现类重写)

3、static修饰的是静态方法,可以直接被类调用;而abstract修饰的类中只有方法名,无方法体,不能被直接调用,故不能同时修饰一个类或方法

你可能感兴趣的:(JavaSE基础,java,servlet,开发语言)