关闭

Review-Java基础--抽象类(abstract)

标签: 对象继承抽象类
244人阅读 评论(0) 收藏 举报
分类:

抽象类不能被实例化,即如果将一个类声明为abstract,就不能创建这个类的对象。但可以创建一个具体的子类的对象。
另外:可以根据抽象类,可以定义一个抽象类的对象变量,但它只能引用非抽象子类的对象。
假设Person为一个抽象类,Sudent为一个继承自Person的非抽象子类。则Person p=new Person(“name”);当然了这事一个错误的写法
但可以创建一个具体子类的对象
Person p=new Student(“name”);
p为抽象类Person的变量,Person引用了一个非抽象子类Student的实例

package abstractClassess;

import javax.swing.text.StyledEditorKit.ForegroundAction;

/**
 * This program demonstracts abstract classes;
 * 
 * @version 2016-08-29
 * @author Administrator
 *
 */
public class PersonTest {

    public static void main(String[] args) {
        Person[] person = new Person[2];
        //抽象类不能实例化
        person[0] = new Employee("张三", 3728, 1293, 20, 2);
        person[1] = new Student("小明", "Computer Science And Technology");
        for (Person people : person) {
            System.out.println(people.getName() + "," + people.getDescription());
        }
    }

}
package abstractClassess;

public abstract class Person {


    /* 抽象方法充当占位作用,具体实现在子类中*/
    public abstract String getDescription();

    private String name;

    public Person(String name)
    {
        this.name=name;
    }
    public String getName()
    {
        return name;
    }

}
package abstractClassess;

public class Student extends Person{

    private String major;
    public Student(String name,String major){
        super(name);

        this.major=major;
    }
    public String getDescription()
    {
        return ("a student majoring in "+major);
    }
}
package abstractClassess;

import java.util.Date;
import java.util.GregorianCalendar;

public class Employee extends Person{

    private double salary;
    private Date hireDay;
    public Employee(String name,double s,int year,int month,int day) {
        super(name);
        // TODO Auto-generated constructor stub
        this.salary=s;
        GregorianCalendar calender=new GregorianCalendar(year,month-1,day);
        hireDay=calender.getTime();

    }

    public double getSalary()
    {
        return salary;
    }
    public Date getHireDay()
    {
        return hireDay;
    }
    @Override
    public String getDescription() {
        // TODO Auto-generated method stub
        return String.format("an employee with a salary of $%.2f", salary);
    }

    public void raiseSalary(double byPercent)
    {
        double raise=salary * byPercent/100;
        salary+=raise;
    }
}
0
0
查看评论

抽象类abstract详解

定义 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则变得更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计的非常抽象,以至于他没有具体的实例,这样的类叫做抽象类。 特点 abstract修饰的类是抽象类 不可以实例化 但是有构造器(凡事类都...
  • u010892841
  • u010892841
  • 2016-05-10 19:50
  • 1242

抽象类abstract的特点

当多个类中出现相同功能,但是功能主体不同, 这是可以进行向上抽取。这时,只抽取功能定义,而不抽取功能主体。 抽象:看不懂。 抽象类的特点: 1,抽象方法一定在抽象类中。 2,抽象方法和抽象类都必须被abstract关键字修饰。 3,抽象类不可以用new创建对象。因为调用抽象方法没意义...
  • lebron_wei
  • lebron_wei
  • 2015-04-24 23:06
  • 2175

抽象类和抽象方法 abstract类和abstract方法

可以使用abstract来修饰一个类或者方法。 用abstract修饰的类表示这个类是一个抽象类,用abstract修饰的方法表示这个方法是一个抽象方法。 抽象类不能被实例化。 抽象方法是只有方法声明,而没有方法的实现内容。 一个类中,只要有一个抽象方法,这个类必须被声明为抽...
  • u010737354
  • u010737354
  • 2015-10-20 15:45
  • 5784

抽象类(abstract class)和接口(Interface)的区别

前言 抽象类(abstract class)和接口(Interface)是Java语言中对于抽象类定义进行支持的两种机制,赋予了Java强大的面向对象能力。二者具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstractclass和Interface的选择显得比较随意。...
  • aptentity
  • aptentity
  • 2017-04-01 11:53
  • 1400

abstract(抽象) 的应用场景和需要注意的细节

抽象类的应用场景 抽象类要注意的细节:
  • dh1221
  • dh1221
  • 2015-05-20 22:08
  • 1805

Scala中特质trait与抽象类abstract的区别

来源:https://twitter.github.io/scala_school/zh_cn/basics.html 什么时候应该使用特质而不是抽象类?  如果你想定义一个类似接口的类型,你可能会在特质和抽象类之间难以取舍。这两种形式都可以让你定义一个类型的一些行为,并要求继承者定义...
  • zy_zhengyang
  • zy_zhengyang
  • 2016-05-30 21:19
  • 3018

抽象类abstract和接口interface的区别与深入思考

在以前的编程过程中,经常对abstract和interface混淆,相信很多初学者都有这样的困惑,也问过很多经验丰富的程序员,他们也不能清楚地说出个所以然来。经过自己的思考,想到了一种比较形象的方式来区别和深入理解abstract和interface的概念。 abstract和interface的...
  • wujiaxian
  • wujiaxian
  • 2014-10-11 11:32
  • 2896

Java关键字之abstract(抽象类的概念和使用)

1、概述 (1)只给出方法定义而不具体实现的方法被称为抽象方法,抽象方法是没有方法体的,在代码的表达上就是没有“{}”。使用 abstract 修饰符来表示抽象方法和抽象类。 (2)abstract修饰符表示所修饰的类没有完全实现,还不能实例化。如果在类的方法声明中使用abstract修饰符,表...
  • eff666
  • eff666
  • 2016-08-26 08:59
  • 4878

Java开发手册 学习1:抽象类命名使用 Abstract 或 Base 开头

重温抽象类的概念  我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的。如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。比如new Animal(),我们都知道这个是产生...
  • l675015956l
  • l675015956l
  • 2018-01-19 20:34
  • 38

抽象类(abstract class)与接口(interface)的异同

抽象类:包含抽象方法的类就是抽象类 接口:指抽象方法的集合,方法不包含方法体相同点: 都不能被实例化 接口的实现类或者抽象类的子类都必须实现了接口或抽象类中的方法后才可以被实例化 不同点: 接口只有定义,方法不能在接口中实现,实现接口的类要实现接口中所有的方法;抽象类可以有定义与实现,方法可以在抽...
  • aym_fuhong
  • aym_fuhong
  • 2016-09-05 20:07
  • 1815
    个人资料
    • 访问:26069次
    • 积分:1061
    • 等级:
    • 排名:千里之外
    • 原创:81篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条