JAVA中的抽象类

1、抽象类的概念

包含抽象方法的类称之为抽象类,抽象方法是指只声明,并不实现的方法,抽象方法和类名都要由abstract修饰。如下就是一个标准的抽象类:

abstract class A{

public abstract  void setName();

}

用abstract修饰的类,如果不包含抽象方法,也叫抽象类。

2、使用抽象类的原则

抽象类不能被实例化,如下代码中实例化抽象类会出错:

public class Test{

public static void main(String args[]){

A a;//声明对象

a = new A();//出错

}

应用抽象类只能通过子类,换句话说,抽象类必须被子类继承,这与final修饰的类正好相反。子类继承抽象类,必须把抽象类中的所有抽象方法都实现。

值的注意的是,抽象类虽然不能直接实例化,却有构造方法,它的构造方法仅在子类中被调用。

通过对象的多态性实现抽象类,通过子类实例化并向上转型为父类,调用的方法是被重写过的方法,代码如下所示:

abstract class A{

public abstract void printA();

}

class B extends A{

public void printA(){

system.out.printin("A");

}

}

class Test{

public static void main(String args[]){

A a = new B();

A.printA();//输出A

}

}

3、抽象类的用途

简单来说,抽象类就是一个模板,它约束子类必须实现的方法。如下所示,体会一下抽象类的作用:

abstract class Person1{
private String name;
private int age;
public Person1(String name,int age){
this.name =name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void say(){
System.out.println(this.getContent());
}
public abstract String getContent();

}
class Student1 extends Person1{
private float score;
public Student1(String name,int age,float score){
super(name,age);
this.score = score;
}
public float getScore(){
return this.score;
}
public void setScore(float score){
this.score = score;
}
public  String getContent(){
return "学生姓名:"+super.getName()+"年龄:"+super.getAge()+"分数:"+this.score;
}
}
class Worker extends Person1{
private float salary;
public Worker(String name,int age,float salary){
super(name,age);
this.salary = salary;
}
public float getSalary() {
return salary;
}


public void setSalary(float salary) {
this.salary = salary;
}


public  String getContent(){
return "工人姓名:"+super.getName()+"年龄:"+super.getAge()+"分数:"+this.salary;
}
}


public class AbatractExample {
public static void main(String args[]){
Person1 ps = new Student1("张三",16,89);
Person1 pw = new Worker("张二",23,10000);
ps.say();
pw.say();
}
}

学生和工人都有姓名、年龄属性,都有说say的方法,但说的内容不同,此外学生还有成绩属性,工人还有工资属性。

定义Person类为模板,使得学生和工人都要有姓名、年龄属性,并实现say方法,学生say的内容加上成绩,工人say的内容加上工资。

执行结果如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值