java abstract 关键字 抽象类 抽象方法 的使用详解
1.关键字2.抽象类3.抽象方法4.abstract不能用来修饰属性、构造器、private、final、static
1.关键字
关键字abstract:抽象的,可以用来修饰类、修饰方法
2.抽象类
随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征,有时将父类设计得非常得抽象以至于它没有具体的实例,这样的类就叫做抽象类。也可以总结为:抽象类是用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类。抽象类使用需注意的点 ①不可被实例化 ②抽象类有构造器(凡是类都有构造器) ③抽象方法所在的类,一定是抽象类 ④抽象类中可以没有抽象方法。
3.抽象方法
抽象类中只表明方法,没有方法体的方法,主要用于声明方法功能,交由子类去重写(覆盖),实现去其功能。抽象方法使用需注意的点 ①格式:没有方法体,包括{};如:public abstract void eat(); ②抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法 ③若子类继承抽象类,并重写了所有的抽象方法,即这个子类是一个“实体类”,即可以实例化 ④若子类继承抽象类,没有冲写所有的抽象方法,意味着子类仍有抽象方法,则声明必须为abstract的! 3.demo
public class TestAbstract {
public static void main(String[] args) {
// Person p1 = new Person();
// p1.eat();
Student s1 = new Student();
s1.eat();
Person p = new Student();//多态
p.eat();
}
}
abstract class Person{
String name;
public abstract void eat();
public abstract void walk();
public Person() {
}
//不是抽象方法!只是没有方法体
public void sleep() {
}
public Person(String name) {
this.name = name;
}
}
class Student extends Person{
public void eat() {
System.out.println("student eat");
}
public void walk() {
System.out.println("student walk");
}
}
abstract class Worker extends Person{
public void eat() {
System.out.println("worker eat");
}
// public void walk() {
// System.out.println("worker walk");
// }
}
4.abstract不能用来修饰属性、构造器、private、final、static
dome
abstract class A{
// 对于类来讲,它能够实例化,因为它有构造器,对于方法来讲,它能够被子类重写。
// 但在多态中的体现,并不包括属性,具体调取属性的,看的是引用是什么,属性无法覆盖。
// abstract int name;
// public abstract A() {
// //因为构造器不能被重写
// }
// private abstract void method1();//子类不能覆盖父类中声明为private的方法
// public abstract final void method1();//一个不让重写,一个又让重写,所以本身本来就矛盾
// 类方法可以类还没有实例化的时候调用,但abstract修饰的本身就没有方法体
// public abstract static void method3();
}
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。