- 抽象的反义词是具体,抽象也就是不能具体
抽象方法就是指不能具体实现的方法,抽象方法没有方法体且要使用abstract关键字修饰
抽象方法使用时的语法格式访问权限修饰符 abstract 返回值类型 方法名();
- 没有方法体
eg:public abstract void cry;
(如上就是描述了一个动物叫声的抽象方法)
抽象类的概念抽象类就是不能具体实例化的类,也就是不能创建对象,并且要使用abstract关键字修饰
关于抽象类的注意事项1.抽象类中可以定义成员变量,成员方法和构造方法.
2.抽象类中可以有抽象方法也可以没有抽象方法
3.有抽象方法的类一定是抽象类
-
注意:严格来说,只有具有抽象方法且用abstract关键字修饰的类才是真正的抽象类
-
抽象类不能创建对象是因为担心新手程序员通过创建对象而去调用抽象类中的抽象方法(因为抽象方法没有方法体,也就是没有实际意义,所以调用了也没有用)
抽象类的实际意义不在于创建对象,而在于"被继承",当一个继承抽象类之后,要么重写这个抽象类中的抽象方法,要么这个继承的类也要定义为抽象类(也就是抽象类对子类有强制性和规范性)
- 强制性:强制性就是这里的子类必须要重写抽象类的抽象方法,或者这个类就也要变成抽象类
- 规范性:规范性就是子类要重写抽象类中的抽象方法,所以就要遵守方法重写的规范
方法重写的规范:
1.权限修饰符可以不变,也可以换成访问权限更高的权限修饰符
2.返回值类型也要相同或者是返回子类类型
3.方法名一样
4.参数列表相同
模板设计模式出现抽象类的场合我们就叫模板设计模式
多态的使用场合:场合一:通过参数的传递来实现多态,也就是实参给形参的传递形成多态
public Shape{
…
…
…
}
publi Circle extends Shape{
…
…
public static void show(Shape s){
s.print();
}
}
public TextShape{
public static void main(String[] args){
Shape.show(new Circle());
}
}
场合二:
在方法体中直接使用父类的引用指向子类的对象而完成多态的使用
eg:
public Shape{
public staitc void main(String[] args){
Shape s=new Circle();
}
}
经验分享:在以后我们使用继承的时候(包括抽象类的使用,因为抽象类就是为了继承),我们一般有两种创建对象的方式:
方式一(基础创建方式):
SubAbstract sub=new SubAbstract();
这种方式就是使用子类的引用指向了子类的对象
方式二(进阶版创建方式):
Abstract abs=new SubAbstract();
这种方式就是使用父类的引用指向了子类的对象(也就是使用了多态)
- 在以后的使用当中我们推荐使用第二种创建对象的方式,也就是使用多态创建的方式,
使用第二种创建方式的优点:
因为当父类的引用指向了子类的对象时父类所调用的子类的所有方法都一定是父类都有的方法,那么要调用另一个子类的同一种方法时我们只需要修改new关键字之后的部分即可,也就是修改new后面对应子类的构造方法即可调用另一个子类的方法了,而其他地方则无需修改,“从而提高了代码的可维护性”
使用第二种创建方式的缺点:
当要调用子类所独有的方法时就要进行向下转型(也就是引用类型的转换)


![java 抽象类[详解] java 抽象类[详解]](http://www.mshxw.com/aiimages/31/425009.png)
