抽象类
将事物的共性抽出来到一个类中,这个类就叫做抽象类。
package org.westos_03_抽象类;
/**
* 抽象类的概念:
* 每一个动物的吃和睡的功能不一样,不应该把动物类定义为一个具体类,而是给出一个声明(abstract)
* 当一个类中如果有抽象功能(抽象方法)的时候,那么这个类一定要定义为抽象类!
*
* 问题:一个抽象类中可以有非抽象方法吗?
* 一个抽象类中可以抽象,也可以有非抽象的(作为一个判断题记忆!)
*
* 抽象类不能实例化:抽象类不能创建对象
* 一个抽象类如何进行实例化:
* 通过抽象类多态形式:父类的引用指向子类对象,通过子类进行初始化!
* 抽象类的子类的特点:
*
* 1)抽象类的子类是抽象类,那么没有意义!
* 最终使用的就是通过子类进行对象初始化的,如果子类都被抽象修饰了,那么也不能创建对象,所以没意义
*
* 抽象类多态:
* 强制子类必须重写当前抽象的父类中所有的抽象方法
* 还可以提高代码的维护性(里面继承关系保证!)
*
*
*
*
* */
abstract class Animal{
//抽象方法:没有方法体的一个方法
public abstract void eat() ;
public abstract void sleep() ;
//具体方法
/*public void eat(){
System.out.println("eat");
}*/
public void show(){
System.out.println("show Animal....");
}
}
//抽象的子类
//abstract class Cat extends Animal{
//
//}
//子类是具体类
class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
@Override
public void sleep() {
System.out.println("猫趴着睡觉..");
}
}
//测试类
public class AbstractDemo {
public static void main(String[] args) {
//当前Animal已经被abstract修饰了
// Animal a = new Animal();//Cannot instantiate the type Animal:抽象类不能实例化:instaceof
//多态:父类引用指向子类对象
Animal a = new Cat() ; //Animal是抽象类,---->抽象类多态形式
a.eat() ;
a.sleep() ;
}
}
package org.westos_03_抽象类;
/**
* 抽象类的成员特点
* 成员变量:
* 可以是变量也可以是自定义常量
* 构造方法:
* 抽象类可以有构造方法:包括有参构造和无参构造
* 作用:通过抽象类多态的形式:让子类进行数据的初始化
* 成员方法:
* 可以有抽象方法,也可以有非抽象方法
*
* 抽象类的成员方法特性:
* 抽象方法:强制子类必须要做到一件事情:方法重写(覆盖)
* 非抽象方法:由继承保证可以去提高代码的复用性
* */
abstract class Fu{
private String name ;
private int age ;
//成员变量
public int num = 100 ;
public final int num2 = 200 ; //被final修饰:自定义常量
//无参构造
public Fu(){
}
//有参构造
public Fu(String name,int age){
this.name = name ;
this.age = age ;
}
//抽象方法
public abstract void show();
//非抽象方法
public void function(){
System.out.println("function Fu...");
}
}
//子类
class Zi extends Fu{
@Override
public void show(){
System.out.println("show Zi....");
}
}
//测试类
public class AbstractDemo2 {
public static void main(String[] args) {
//抽象类多态:
//抽象类的类名 对象名= new 子类名() ;
Fu f = new Zi() ;
f.show() ;
f.function() ;
}
}
package org.westos_03_抽象类;
/**
* 问题:
* 一个类中如果没有抽象方法,那么这个类可不可以定义为一个抽象类呢?
* 可以!为什么
* 不能让其创建对象!
*
* abstract不能和哪些关键字共同使用?
* private 和abstract不能共同使用
* final和abstract不能共同使用
* static和abstract不能共同使用
*
* 实际开发中:public 公共访问权限
* */
abstract class Fu2{
//无参构造
// private Fu2(){
//
// }
// 抽象方法
public abstract void show() ;
//非法修饰
// private abstract void function() ;
//非法修饰:编译不通过
// public final abstract void function() ;
//非法修饰
// public static abstract void function() ;
}
class Zi2 extends Fu2{
public void show(){
System.out.println("show Zi2....");
}
}
//测试类
public class AbstractDemo3 {
public static void main(String[] args) {
//抽象类多态...创建对象
}
}

浙公网安备 33010602011771号