抽象类定义

抽象类定义

抽象类

  • 抽象类表示一个抽象概念
  • 抽象类不能产生实例化对象,必须通过子类实例化。因此抽象类必须有子类的出现。
  • 抽象类能够明确的定义子类需要覆写的方法。
  • 抽象类使用 abstract 关键字声明。
  • 抽象类中具有抽象方法,抽象方法同样需要用 abstract 关键字声明。该方法只有声明,没有方法体(所以子类必须覆写抽象类中的抽象方法,并且抽象类的子类不能为抽象类)
  • 抽象类可以具有构造方法用来初始化抽象类的属性
  • 抽象类不能用 final 关键字定义,因为其必须具有子类,否则无法实例化。

例如:
图形类(Shape),是一个抽象的概念,我们无法具象化该图形的面积等,所以它的成员函数 area()为空。
而继承它的子类(矩形、圆、三角形、椭圆)就可以覆写 area() 成员方法。

import java.util.Scanner;

abstract class Shape{  // 图形类
    abstract public String area();  // 该成员方法只有方法声明,没有方法体
}
class Circle extends Shape{  // 圆类
    final private static double pi = 3.14;
    private double r;

    public String perimeter(){
        System.out.print("请输入圆的半径:  ");
        Scanner sca = new Scanner(System.in);
        this.r = sca.nextDouble();
        return "圆的周长为:" + (2 * pi * r);
    }
    public String area(){
        System.out.print("请输入圆的半径:  ");
        Scanner sca = new Scanner(System.in);
        this.r = sca.nextDouble();
        return "圆的面积为: " + (2 * pi * r * r);
    }
}
public class JavaDemo {
    public static void main(String[] args) {
        Circle cir = new Circle();
        System.out.println(cir.perimeter());
        System.out.println(cir.area());
    }
}
// 运行结果
请输入圆的半径:  33
圆的周长为:207.24
请输入圆的半径:  33
圆的面积为: 6838.92

Process finished with exit code 0

抽象内部类

如果抽象类只有 1 个子类,则可以将该子类封装为 抽象内部类,从而为用户隐藏这个无需知道的类。

package com.itheima;

abstract class A       //抽象类
{

    abstract public void printData();//abstract修饰的方法为抽象方法,无需实现方法体.但是必须被子类覆写
    static private class B extends A      //需要在抽象类里隐藏的内部类
    {
        public void printData()
        {
            int data = 12;
            System.out.println("B Data:"+ data);       //打印内部类的Data值
        }
    }

    static public A getInstance()           //获取实例
    {
        return new B();                 //通过静态方法来获取要隐藏的静态抽象内部类  (静态方法里只能使用静态变量)
    }
}
public class JavaDemo {
    public static void main(String[] args) {
        A a = A.getInstance();
        a.printData();                           //等价于: A.getInstance().printData();
    }
}
// 运行结果
B Data:12

Process finished with exit code 0

抽象类缺点:

由于Java的单继承,每个类只能从一个抽象类继承,没有接口灵活。

文章参考自: https://www.cnblogs.com/lifexy/p/10826817.html

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值