抽象类--

一、概念:

①定义:拥有抽象方法的类就是抽象类,抽象类并不是只有抽象方法,抽象类必须使用abstract关键字声明。

            类即使不含抽象方法,也可以将类声明为抽象类

②与普通类的比较:普通类是一个完善的功能类,可以直接产生实例化对象;抽象类并不能直接产生实例化对象

二、使用:

a. 定义一个子类继承抽象类, 重写抽象类之中的全部抽象方法

b.如果子类没有全部重写父类的抽象方法,则必须将子类也必须定义为为abstract类

c. 可以直接访问静态变量静态方法

d. 可以添加普通成员变量普通成员方法,但是不可以直接访问,因为要求实例化

e.不能用final修饰抽象类或者抽象方法

abstract class Person {                      //抽象类必须使用abstract关键字声明
    private String name;                     //可以添加普通成员变量,但不可以直接访问
 
    public Person(String n){                 //可以添加普通成员方法,但不可以直接访问
        name=n;
    }

    public  String getName(){
        return name;
    }

    public abstract String getDescription(); //没有方法体的方法就是抽象方法,必须要使用abstract关键字修饰
    

}

public class Employee extends Person {
    
   private double salary;
   private Date hireDay;

   public Employee(String n,double s,int year,int month,int day){
       super(n);
       salary=s;
       GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
       hireDay=calendar.getTime();
   }

    public String getDescription(){
        return String.format("an employee with a salary of $%.2f",salary);
    }


}

class Student extends Person{

    private String major;

    public String getDescription(){                      //重写父类抽象方法
        return "a student majoring in"+major;
    }

    /*
    @param n the student's name
    @param m the student's major
     */
    public Student(String n,String m){
        super(n);      //pass n to superClass constructor
        major=m;
    }
}

public class test {
    public static void main(String[] args) {

    Person[] people=new Person[2];
    people[0]=new Student("王伟","数学");
    people[1]=new Employee("李四",20000,1989,10,1);

    for(Person p:people){
        System.out.println(p.getName()+","+p.getDescription());
    }

    }
}
 

三.抽象类中的向上转型

    当子类继承抽象类的时候,则抽象类成为父类,这个时候利用向上转型可以产生多态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值