Java基础抽象类详解

简介: Java基础抽象类详解

抽象类:


1、什么是抽象类?


类和类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类。

类本身是不存在的,所以抽象类无法创建对象《无法实例化》。

2、抽象类属于什么类型?


抽象类也属于引用数据类型。

3、抽象类怎么定义?


语法:

 

[修饰符列表] abstract class 类名{
      类体;
    }


4、抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的。


5、final和abstract不能联合使用,这两个关键字是对立的。


6、抽象类的子类可以是抽象类。也可以是非抽象类。


7、抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。


8、抽象类关联到一个概念:抽象方法。什么是抽象方法呢?


抽象方法表示没有实现的方法,没有方法体的方法。例如:

   public abstract void doSome();

   抽象方法特点是:

    特点1:没有方法体,以分号结尾。

    特点2:前面修饰符列表中有abstract关键字。


9、抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中。


10、抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中。


11、抽象类继承 ,如果 子类 也是一个 抽象类 ,并不要求一定 重写父类方法 。 如果 子类不是抽象类 ,则要求 子类 一定要实现 父类 中的 抽象方法 。


12、抽象类本类中抽象方法无法使用方法重载


重要结论:


一个非抽象的类继承抽象类,必须将抽象类中的抽象方法实现了。

   这是java语法上强行规定的,必须的,不然编译器就报错了

 

   这里的覆盖或者说重写,也可以叫做实现.(对抽象的实现)


示例代码01:


public class AbstractTest01{
  public static void main(){
  // new Account();//Account是抽象的;无法实例化
  }
}
/* final abstract class Account{//非法的修饰符组合:abstract和final
} */
abstract class Account{
  //如果不写无参构造方法会报错
  /* public Account(String s){
  } */
  public abstract void doOther();
  public void sumInt(){}//编译通过,抽象类中可以有普通方法
}
abstract class CreditAccount extends Account{//编译通过
  /* public CreditAccount(){
  super();//不写的话会自动会有一个构造方法并且第一行会自带一个super关键字
  } */
}
/* class A{
  public abstract void a(){};//编译报错,抽象类只能出现在抽象方法中
} */


示例代码02:


public class AbstractTest02{
  public static void main(String[] args){
    //多态,向上转型,父类型引用指向子类型对象
    //面向抽象编程,不要面向具体编程,降低程序的耦合度,提高程序的扩展力
    //这种编程思想符合OCP原则
    Animal a = new Bird();
    a.move();
    Animal b = new Cat();
    b.move();
  }
}
//动物类(抽象类)
abstract class Animal{
  //抽象方法
  public abstract void move();
}
/* abstract class Bird extends Animal{
  public abstract void move();
} */
//子类(非抽象的)
class Bird extends Animal{//如果不重写方法会编译报错,错误:Bird不是抽象的,并且未覆盖Animal中的抽象方法move();
  public void move(){
  System.out.println("鸟儿在飞翔!");
  }
}
class Cat extends Animal{
  public void move(){
  System.out.println("小猫在步行!");
  }
}


例题:


0a2653c851af460fa595bd959398a8f1.png


例题代码:


public class Test{
    public static void main(String[] args) {
        //创建圆形对象
        Circular c = new Circular();
        c.Area(15.2);
        //创建长方形对象
        Rectangle r = new Rectangle();
        r.findArea(12.4,56.3);
        //创建正方形对象
        Square s = new Square();
        s.findArea(15.9);
    }
}
public abstract class Type{//抽象类本类中抽象方法无法使用方法重载
    public abstract void findArea();
    public abstract void Area(double a);
    public abstract void findArea(double x,double y);
    public abstract void findArea(double v);
}
class Circular extends Type{
    public static final double PI = 3.14;//常量π
    @Override//此关键字在抽象类的子类中可有可无
    public void findArea() {
    }
    @Override
    public void Area(double a) {
        double c = PI * a * a;
        System.out.println("圆形的面积是:" + c);
    }
    @Override
    public void findArea(double x, double y) {
    }
    @Override
    public void findArea(double v) {
    }
}
class Rectangle extends Type{
    @Override
    public void findArea() {
    }
    @Override
    public void Area(double a) {
    }
    public void findArea(double x, double y){
     double z = x * y;
        System.out.println("长方形的面积是:" + z);
    }
    @Override
    public void findArea(double v) {
    }
}
class Square extends Type{
    @Override
    public void findArea() {
    }
    @Override
    public void Area(double a) {
    }
    @Override
    public void findArea(double x, double y) {
    }
    public void findArea(double v){
        double d = v * v;
        System.out.println("正方形的面积是:" + d);
    }
}


运行结果:


2d65d23f6d4748949b924e4057485923.png


相关文章
|
2月前
|
存储 Java 开发者
抽象类和接口,你不知道的秘密!Java编程新视角
抽象类和接口,你不知道的秘密!Java编程新视角
34 5
|
2月前
|
设计模式 Java 开发者
抽象类和接口如何改变你的编程方式?Java界的革命
抽象类和接口如何改变你的编程方式?Java界的革命
40 3
|
2月前
|
Java 程序员
抽象类与接口的隐藏力量!揭秘Java编程
抽象类与接口的隐藏力量!揭秘Java编程
37 3
|
2月前
|
算法 Java 开发者
深入抽象类与接口的世界,你的Java代码还可以这样写你的Java代码还可以这样写
深入抽象类与接口的世界,你的Java代码还可以这样写你的Java代码还可以这样写
30 3
|
2月前
|
设计模式 Java
【惊天揭秘】Java编程绝技大曝光:接口、抽象类、静态类与非静态类的神秘面纱终被揭开!
【8月更文挑战第22天】Java支持面向对象编程,通过接口、抽象类、静态类(如枚举与工具类)及普通类实现设计原则。接口定义行为规范,允许多重继承;抽象类含未实现的抽象方法,需子类完成;静态类常为工具类,提供静态方法;普通类则实例化对象。恰当运用这些结构能提升程序质量。
34 2
|
15天前
|
Java
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
本文介绍了Java中抽象类和抽象方法的使用,以及ArrayList的基本操作,包括添加、获取、删除元素和判断列表是否为空。
15 2
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
|
25天前
|
Java
Java——抽象类和接口
抽象类是一种不能被实例化的类,至少包含一个抽象方法(无实现体的方法),常用于定义一组相关类的共同特征,并强制子类实现特定方法。抽象方法不能被 `static` 或 `final` 修饰,且必须被重写。 接口则是一个完全抽象的类,用于规范类的行为。接口使用 `interface` 关键字定义,不能实例化,并且类与接口之间是实现关系。 内部类是在一个类内定义的类,分为成员内部类、静态内部类、局部内部类和匿名内部类。成员内部类可被修饰符修饰,静态内部类只能访问外部类的静态成员,局部内部类定义在方法内,匿名内部类则隐藏了名字,直接通过 `new` 关键字定义并实现接口或继承类。
15 5
Java——抽象类和接口
|
25天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
13天前
|
Java
Java 抽象类详解
在 Java 中,抽象类是一种特殊类,用于提供基础定义并派生具体子类,支持代码复用。它包含抽象方法(无实现)和具体方法(有实现),不能被实例化,需用 `abstract` 关键字定义。子类必须实现所有抽象方法,除非子类也是抽象类。抽象类可用于定义模板或框架,确保子类实现特定方法。通过示例展示了如何定义抽象类 `Animal` 及其子类 `Dog` 和 `Cat`,并在主类中调用相关方法。使用抽象类可以提高代码复用性和设计质量,但也可能增加维护难度和性能开销。
|
12天前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】