Java抽象类的概述

一、抽象类的概述

  • 抽象就是看不懂的
  • abstract关键字修饰的类被称为抽象类
  • 抽象类格式: abstract class 类名 {}
2.抽象类的特点
  • 1.抽象类抽象方法必须用abstract关键字修饰
    • abstract class 类名 {}
    • public abstract void eat();
  • 2.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口
  • 3.抽象类不能实例化,抽象类如何实例化呢?
    • 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
  • 4.抽象类的子类
    • 要么是抽象类
    • 要么重写抽象类中的所有抽象方法
class Demo1_Abstract {
 public static void main(String[] args) {
     //错误: Animal是抽象的; 无法实例化
     //Animal a = new Animal();

//父类引用指向子类对象,执行到这里已经运行了父类Animal的无参构造函数
     Animal a = new Cat(); 
     a.eat();
 }
}

abstract class Animal {    //抽象类
 public abstract void eat();//抽象方法
 public Animal() {
     System.out.println("父类空参构造");
 }
}


class Cat extends Animal {
 public Cat() {
     super();
 }
 public void eat() {
     System.out.println("猫吃鱼");
 }
}

输出:
父类空参构造
猫吃鱼
3.抽象类的成员特点
抽象类的成员特点
  • 成员变量:既可以是变量,也可以是常量。
  • abstract是否可以修饰成员变量?
    • 不能修饰成员变量
  • 构造方法:有。用于子类访问父类数据的初始化。
  • 成员方法:既可以是抽象的,也可以是非抽象的。
案例演示
class Demo2_Abstract {
  public static void main(String[] args) {
      System.out.println("Hello World!");
  }
}


abstract class Demo {
  int num1 = 10;
  final int num2 = 20;

  public Demo() {
  }

  public void print() {
      System.out.println("111");
  }

  public abstract void method();
}


class Test extends Demo {
  public void method() {
      System.out.println("111");
  }
}
4.抽象类的成员方法特性:
  • 抽象方法 强制要求子类做的事情。
  • 非抽象方法 子类继承的事情,提高代码复用性。
5.面试题
class Demo4_Abstract {
   public static void main(String[] args) {
       System.out.println("Hello World!");
   }
}
/*
* A:面试题1
* 一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
* 可以
* 这么做目的只有一个,就是不让其他类创建本类对象,交给子类完成

* B:面试题2
* abstract不能和哪些关键字共存

1.abstract和static
被abstract修饰的方法没有方法体
被static修饰的可以用类名.调用,但是类名.调用抽象方法是没有意义的

2.abstract和final
被abstract修饰的方法强制子类重写
被final修饰的不让子类重写,所以他俩是矛盾

3.abstract和private
被abstract修饰的是为了让子类看到并强制重写
被private修饰不让子类访问,所以他俩是矛盾的
*/

abstract class Demo {
   //public static abstract void print();  //错误: 非法的修饰符组合: abstract和static
   //public final abstract void print();   //错误: 非法的修饰符组合: abstract和final
   //private abstract void print();	    //错误: 非法的修饰符组合: abstract和private
}
6.抽象类和普通类的区别
  • 抽象类中可以有成员变量,成员方法,构造方法,静态方法,常量 有的话又有什么意义呢?

    • 成员变量 --> 给子类使用
    • 成员方法 --> 给子类使用
    • 构造方法 --> 帮助子类初始化父类继承下来的成员
    • 静态方法 --> 直接通过类名访问,防止创建对象的不建议访问方式
    • 常量 --> 可以,方便访问
  • 抽象类和普通类没有区别,只不过是抽象类多了抽象方法而已

    • 抽象类的抽象方法强制子类重写
    • 非抽象方法直接给子类使用
    • 构造方法和成员变量直接给子类使用
    • 抽象类是一个彻头彻尾的服务类,服务于所有的子类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值