7.22Java进阶P493-P498
关键词: 开始CSDN记录 abstract 类
抽象类:
1.什么是抽象类?
抽象类无法实例化,无法创建对象
抽象类是类和类之间有共同特征,将这些具体共同特征的类再进一步抽象,就形成了抽象类。 由于类本身是不存在的,因此抽象类无法创建对象
例:
抽象类和抽象类可能还有特征,还可以进一步抽象。
2.抽象类属于什么类型
抽象类属于引用数据类型。
3.抽象类怎么定义
(修饰符列表) abstract class 类名{
类体;
}
子类继承抽象类,继承之后可以创建对象
4.final和abstract 无法共存,非法的修饰组合
5.抽象类的子类可以是抽象类,也可以是非抽象类
6.抽象类虽然无法实例化,但抽象类是否有构造方法?
有,这个抽象方法是提供给子类使用的,无参的构造第一行什么都没写的话,默认有一个super(),
回顾:不写默认给个无参构造
7.抽象类关联到一个概念:抽象方法。什么是抽象方法呢?
抽象方法表示没有实现的方法,没有方法体的方法。
例:
Public abstract void dosome();
抽象方法特点:
特点1:没有方法体,以分号结尾
特点2:前面修饰符列表用abstract
8.(重要结论)抽象类中不一定要有抽象方法,但是抽象方法必须要出现在抽象类中。
若非抽象的子类继承了抽象的方法,若没有对抽象方法重写,那便会报错。
因此重要结论:
一个非抽象的类继承了抽象类,必须将抽象类的抽象方法实现了
这是java语法强行规定的,不然编译器就报错了
这里的覆盖,或者重写,这里也可以叫做实现
若子类也是抽象的,那么也可以不用重写/覆盖/实现。
面向抽象编程:
下面看写的一个自己练习的小例子
public class AbstractTest {
public static void main(String[] args) {
//能不能使用多态?
//父类型指向子类型引用对象。
Animal a = new Bird();//向上转型。
//这就是面向抽象编程。
//以后你都是调用a.XXXX
//a的类型是Animal,Animal是抽象的
//面向抽象编程,不要面向具体编程,降低程序的耦合度,提高程序的扩展性
//这种编程思想符合OCP原则。
/*
分析以下:
编译的时候这个move()方法是谁得?
Animal的
运行的时候这个move()方法又是谁的?
Brid的
*/
a.move();
Animal b = new Cat();
b.move();
}
}
abstract class Animal{
//抽象方法
public abstract void move();
}
class Bird extends Animal{
public void move(){
System.out.println("鸟儿在飞翔");
}
}
class Cat extends Animal{
public void move(){
System.out.println("猫儿在走猫步");
}
}
运行截图:
穿插一个java面试题
java语言中凡是没有方法体的都是方法都是方法
答:不对,错误的。
Object类中就有很多方法都没有方法体的,都是以;结尾的,但他们都不是抽象方法,例如:
Public native int hashCode();
这个方法调用了C++写的动态链接库程序。
前面修饰符列表没有:abstract 有一个native,表示调用JVM本第程序
心得小总结:
今天开始了在CSDN记录我的学习java的过程,写博客的时候也是一个复习的过程,加深学习记忆,也方便于以后来回顾,自己写的东西比起来网上的知识点,肯定会更容易回忆起来,最近的睡眠时间比较晚,今天开始调整的比较早一点,因为今天开始还上传了一些前面天的博客,所以今天的学习内容比较少,以后准备上传的博客是一段比较完整的内容,不要今天学习一半接口明天一半接口这样,因此今天也学了点接口的内容打算在明天发布。最后,希望可以坚持!