Java抽象类


抽象类定义:Java语言中用abstract 关键字来修饰一个类时,这个类叫作抽象类。抽象类是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类。抽象类可以看作是对类的进一步抽象。在面向对象领域抽象类主要用来进行类型隐藏。

1. 抽象类
abstract class Animal{      //可以是默认default 或者 public 或者 protected
    public Animal(){        //抽象类有构造函数
        System.out.println("Animal: 构造方法");
    }
    public abstract void run();  //抽象类可以有抽象方法也可以没有抽象方法,但是抽象方法一定存在抽象类中
    public void eat(){           //抽象类可以有非抽象方法。
        System.out.println("Animal: eat");
    }
}
class Person extends Animal{

    public Person() {
        System.out.println("Person: 构造方法");
    }

    @Override
    public void run() {      //子类必须实现重写抽象父类所有的抽象方法否则子类继续成为一个抽象类
        System.out.println("Person: run");
    }

}
public class Main {
    public static void main(String[] args) {
    //    Animal a = new Animal();        //Error,抽象类不允许实例化对象
        Person p = new Person();
        System.out.println("==================");
        Animal a = new Person();		//上转型
        a.eat();			//回调自己的非抽象方法
        a.run();			//调用子类重写的方法
    }
}
/*输出
Animal: 构造方法
Person: 构造方法
==================
Animal: 构造方法
Person: 构造方法
Animal: eat
Person: run
*/

a. 抽象类的定义只允许是非private类,一旦是private类就无法被子类继承那就没有意义了。

b. 抽象类不能实例化对象,因为子类继承抽象父类必须重写所有的父类方法否则子类自己也必须成为抽象类,因此可以解释出抽象类无法使用final修饰词。

c. 抽象类虽然无法进行实例化对象但是可以做为上整型对象,那么该对象可以调用子类的重写方法。

d. 抽象类虽然不能实例化对象但是存在构造方法。因为抽象类中可能存在一些属性需要初始化子类在继承抽象父类时必须先初始化父类才能再去初始化子类。


2. 抽象方法
abstract class Animal{      //可以是默认default 或者 public 或者 protected
    protected abstract void play();     //protected修饰
    public abstract void run();         //public修饰
    abstract void sleep();              //默认default修饰
//    private abstract void speak();             //错误
    private void go(){					//非抽象的私有方法
        System.out.println("Animal: go");
    }
    public void eat(){                  //非抽象方法
        System.out.println("Animal: eat");
    }
}

a. 抽象类中可以有抽象方法也可以没有抽象方法,同时抽象类中也可以有非抽象方法。

b. 抽象方法同样只允许非private方法,否则子类继承的时候无法重写父类方法(Override)。但是可以有非抽象的private方法。

c. 子类必须实现抽象父类所有的抽象方法,否则子类继续成为一个抽象类




愿你走出半生,归来仍是少年~

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值