抽象类

一、抽象类:天生用来当爹的类

Java创建了一种专门用来当做父类的类,这种类称为抽象类。目的是要求设计者依据它的格式来修改并创建新的类。
注意:由于抽象类只能作为父类,所以不能直接由抽象类创建对象,只能通过抽象类派生出新的类,再由新的类创建对象。

二、抽象类定义规则
  • 抽象类和抽象方法必须要用abstract关键字来修饰。
  • 抽象类不能被实例化,也就是不能用new关键字去产生对象。
  • 抽象方法只需声明,而不需实现。
  • 含有抽象方法的类必须被声明为抽象类,抽象类的子类必须复写所有的抽象方法后才能被实例化,否则这个子类还是个抽象类。
三、抽象类定义格式
abstract class 类名{    //定义抽象类的类名

    声明数据成员;

    //定义一般方法
    访问权限 返回值数据类型 方法名称(参数...){
        ...
    }
    //end

    //定义抽象方法    只需声明不需实现
    abstract 返回值数据类型 方法名称(参数...);
    //end
}

注意:抽象类中方法的定义有两种:一种是一般方法,另一种是抽象方法,它是以abstract关键字为开头的方法,此方法只声明了返回值的数据类型、方法名、参数,没有方法体。

eg:FirstDemo.java

abstract class Person{                                              //定义了一个抽象类,类名为Person
    String name;                                                    //声明了三个属性 name age occupation
    int age;
    String occupation;

    abstract String talk();                                         //定义了一个抽象方法
}

class Student extends Person{                                       //定义一个类Student并继承抽象类Person

    public Student(String name, int age, String occupation){        //Student类的构造方法
        this.name = name;
        this.age = age;
        this.occupation = occupation;
    }

        //因为这个Student类继承了抽象类Person,所以就要复写抽象类Person中所有的抽象方法
        String talk() { 
        return "学生->姓名: "+this.name+", 年龄: "+this.age+",  职业: "+this.occupation;
    }

}

class Worker extends Person{                                        //定义一个类Worker并继承抽象类Person

    public Worker(String name,int age,String occupation){           //Worker类的构造方法
        this.name = name ;
        this.age = age ;
        this.occupation = occupation ;
    }

        //因为这个Student类继承了抽象类Person,所以就要复写抽象类Person中所有的抽象方法
        String talk() {
        return "工人->姓名: "+this.name+", 年龄: "+this.age+",  职业: "+this.occupation;
    }

}
public class FirstDemo {
    public static void main(String[] args){
        Student s = new Student("张三", 20, "学生");
        Worker w = new Worker("李四", 30, "工人");
        System.out.println(s.talk());
        System.out.println(w.talk());
    }
}

运行结果:
学生->姓名: 张三, 年龄: 20, 职业: 学生
工人->姓名: 李四, 年龄: 30, 职业: 工人

与一般的类一样,抽象类中也可以拥有构造方法,但是这些构造方法必须在子类中被调用
eg:SecondDemo.java

abstract class Person{
    String name;
    int age;
    String occupation;

    public Person(String name, int age, String occupation){
        this.name = name ;
        this.age = age ;
        this.occupation = occupation ;
    }

    public abstract String talk();
}

class Student extends Person{

    public Student(String name, int age, String occupation) {
        //在这里必须明确调用抽象类中的构造方法
        super(name, age, occupation);
    }

    public String talk() {
        return "学生->姓名: "+this.name+", 年龄: "+this.age+",  职业: "+this.occupation;
    }

}
public class SecondDemo {
    public static void main(String[] args){
        Student s = new Student("张三", 20, "学生");
        System.out.println(s.talk()) ;
    }
}

运行结果:
学生->姓名: 张三, 年龄: 20, 职业: 学生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值