java abstract 关键字 抽象方法和抽象类的使用详解

版权声明:尊重原创,码字不易,转载需博主同意。 https://blog.csdn.net/qq_34626097/article/details/83446010

1.关键字

  1. 关键字abstract:抽象的,可以用来修饰类、修饰方法

2.抽象类

  1. 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征,有时将父类设计得非常得抽象以至于它没有具体的实例,这样的类就叫做抽象类。也可以总结为:抽象类是用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类。
  2. 抽象类使用需注意的点
    ①不可被实例化
    ②抽象类有构造器(凡是类都有构造器)
    ③抽象方法所在的类,一定是抽象类
    ④抽象类中可以没有抽象方法。

3.抽象方法

  1. 抽象类中只表明方法,没有方法体的方法,主要用于声明方法功能,交由子类去重写(覆盖),实现去其功能。
  2. 抽象方法使用需注意的点
    ①格式:没有方法体,包括{};如: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

  1. 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();
}

猜你喜欢

转载自blog.csdn.net/qq_34626097/article/details/83446010
今日推荐