JAVA关键字——abstract的使用

JAVA关键字——abstract的使用

1、abstract:抽象的;

2、abstract可以用来修饰的结构:类、方法;

3、abstract修饰的类就是抽象类;

3.1 抽象类不可以实例化,否则会报错:Cannot instantiate the type ···(抽象类名)
3.2 抽象类虽然不可以实例化,但它的构造器还是存在并且还是有用的, 便于子类实例化时调用,如下例子可以看到,OverWrite类实例化的时候也会用到Person2的构造器,因为它继承了Person2。至于继承了Person2后OverWrite实例对象也会创建Person2对象的原因,请看super关键字的讲解了噢!

public class Abstract5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		Person2 test = new Person2(); //抽象类不能实例化;Cannot instantiate the type Person2
//		Woman women = new Woman();//抽象类不能实例化:Cannot instantiate the type Woman
		OverWrite overWrite = new OverWrite();
	}

}
abstract class Creature{
	public abstract void breath() ;
}
abstract class Person2 extends Creature{
	int age;
	String name;
	public Person2() {
		System.out.println("Person2你好");
	}
	public Person2(String name,int age) {
		this.name = name;
		this.age = age;
	}
	public String eat() {
		return "吃饭";
	}
	//抽象方法!
	public abstract void read();
}
abstract class Woman extends Person2{
	public abstract void beauty() ;
}
//OverWrite继承了抽象类并且重写了它的抽象方法
class OverWrite extends Person2{
	public OverWrite() {
		System.out.println("OverWrite你好");
	}
	public void read() {}
	public void breath() {}
}

在这里插入图片描述

4、abstract修饰的方法为抽象方法;

4.1 抽象方法只有方法声明,没有方法体,也就是没有大括号;如:

abstract class Creature{
	//抽象方法的声明:
	public abstract void breath() ;
}

4.2 包含抽象方法的类一定是抽象类,抽象类不一定有抽象方法;

//因为由抽象方法breath(),所以这个类必须是抽象类;
abstract class Creature{
	//抽象方法的声明:
	public abstract void breath() ;
}
//虽然该类为抽象类,但它的方法可以是具体的方法,不用一定要有抽象方法
abstract class Creature{
	//抽象方法的声明:
	public void breath(){
		···
	};
}

4.3 若子类重写了父类(包括直接父类和间接父类)的所有抽象方法后,此子类就可以实例化;若子类没有重写,则要用abstract修饰这个子类,让它也成为一个抽象类。

//如这个类,它继承了Person2,Person2又有它自己继承的抽象类,也就是OverWrite有直接父类和间接父类,所以把这些父类的抽象方法都重写后,就可以实现实例化,如上面整体代码所示:OverWrite overWrite = new OverWrite();不会报错;
class OverWrite extends Person2{
	public OverWrite() {
		System.out.println("OverWrite你好");
	}
	public void read() {}
	public void breath() {}
}
//如果子类没有重写父类的抽象方法,那就说明这个子类也含有抽象方法,那就回到4.2所讲,含有抽象方法的类必须为抽象类,所以这个类要用abstract修饰!

5、abstract使用上的注意点:

我们都知道,类的成员有属性、方法、构造器、代码块、内部类。那abstract不能修饰哪些成员呢?
5.1 不能修饰属性、构造器、方法体;
(1)抽象就是空的,属性肯定不为空,
(2)构造器不给它加{}那就失去了意义而且它不能重写,
(3)方法体本身就是一对{},把它去掉那就啥都没有了;
对于方法,也不是所有方法都能修饰的!
5.2 不能修饰私有方法、静态方法、final的方法和final的类
(1)不能修饰私有方法(private),因为私有方法子代看不见,不能重写,而抽象方法就是要重写;
(2)不能修饰静态方法(static),因为静态方法不能被重写;父类的static的方法如果在子类中也有,这两个方法不能构成重写;
(3)不能修饰final的方法,因为final方法就是最后的了,不能重写;
(4)不能修饰final的类,因为final的类不能被继承,而抽象类就是要被继承才有意义的。
以上为笔者学习总结,有误的地方还望各位朋友指出呀!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值