首页 > 其他分享 >抽象类

抽象类

时间:2024-03-27 17:12:59浏览次数:17  
标签:void abstract class Shape 抽象类 public

抽象类

1. 抽象类的作用

子类继承抽象类后 编译器会检验子类是否重写了抽象类中所有的抽象方法

abstract class Shape {
    // 抽象方法
    public abstract void draw();
    
}

// 报错! 没重写Shape抽象类中 所有的抽象方法
// 编译器自动检验 
class Circle extends Shape {

}

class test {
    public static void main(String[] args) {
        
    }
}

 

抽象类就是用来给子类继承,发生动态绑定

abstract class Shape {
    // 抽象方法
    public abstract void draw();
}

class Circle extends Shape {
    @Override
    public void draw() {
        System.out.println("○");
    }
}

class test {
    public static void main(String[] args) {
        // 父类引用 引用子类对象 - 向上转型
        Shape shape = new Circle();
        // 子类重写父类draw方法(重写) -> 父类引用调用父子同名方法 发生动态绑定 执行子类方法 
        shape.draw();
    }
}

 

2. 抽象类和普通类的区别 

抽象类除了不能实例化,多了抽象方法。其他和普通类没区别

abstract class Shape {
    
    // 静态/非静态 成员
    public static int a = 1;
    public int b = 2;
    
    // 构造方法
    public Shape() {
        
    }

    // 抽象方法
    public abstract void draw();

}

class test {
    public static void main(String[] args) {
        
    }
}

 

3. 抽象类中的细节

1.  包含抽象方法的类一定是abstract修饰的抽象类,但是抽象类中可以没有抽象方法

// 报错 !
// 包含抽象方法的类一定是abstract修饰的抽象类
class Shape {
    // 抽象方法
    public abstract void draw();

}

class test {
    public static void main(String[] args) {

    }
}

 

2. 抽象类不能用来实例化对象

abstract class Shape {
    // 抽象方法
    public abstract void draw();

}

class test {
    public static void main(String[] args) {
        // 报错 !
        // 抽象类不能用来实例化对象
        Shape shape = new Shape();
    }
}

 

3. 抽象类中的抽象方法 不能被 private、final、static 修饰

abstract class Shape {
    // 报错 !
    private abstract void draw();
}

class test {
    public static void main(String[] args) {

    }
}

 

4.  如果一个类继承自抽象类,不重写抽象类中的抽象类,那么这个类一定得拿abstract修饰

abstract class Shape {
    // 抽象方法
    public abstract void draw();
}

abstract class Test extends Shape {
    public abstract void draw2();
    public abstract void draw3();
}


class Test2 extends Test {
    
    // 必须重写 Shape,Test抽象类中 所有的抽象方法
    public void draw() {}
    public void draw2() {}
    public void draw3() {}
}


class test {
    public static void main(String[] args) {

    }
}

 

标签:void,abstract,class,Shape,抽象类,public
From: https://www.cnblogs.com/xumu7/p/18099752

相关文章

  • 【知识点】接口和抽象类的区别
    相同点:都不能实例化都可以被实现或者继承继承或者实现的子类需要实现全部抽象方法,否则需要声明为抽象类不同点:不同点抽象类接口声明abstractinterface继承/实现extendsimplements构造器可以有构造器不能有构造器方法抽象方法和具体方法抽象方法......
  • Java面试题:什么是Java中的接口?与抽象类有什么区别?
    一、什么是Java中的接口?与抽象类有什么区别?Java中的接口(Interface)是一种引用类型,类似于类,用于存放抽象方法和静态常量。接口定义了一个规范,规定了实现接口的类应具备哪些方法。它是一种完全抽象的类型,不能直接实例化,必须由其他类来实现(implements)接口,并提供接口方法的具体......
  • Python 中的抽象类和接口类
    【抽象类】抽象类是一个特殊的类,只能被继承,不能被实例化。它主要用于作为其他类的基类或模板。抽象类可以包含抽象方法和具体方法。在抽象类中定义的抽象方法必须在子类中进行实现。fromabcimportabstractmethod,ABCMetaclassFruit(metaclass=ABCMeta):@abstractme......
  • JAVA面向高级二:抽象类 使用抽象类的好处
      packagecom.itheima.abstract1;publicclassTest{publicstaticvoidmain(String[]args){}}abstractclassA{publicStringa;privatestaticStringb;publicstaticintaa;publicA(Stringa){this.a=a;......
  • 纯虚函数与抽象类
    当类中有了纯虚函数,这个类也就是抽象类,抽象类的特点:  无法实例化对象  子类必须重写抽象类中的纯虚函数,否则也属于抽象类 纯虚函数语法:  virtual返回值类型函数名(参数列表)=0 #include<iostream>classAbstractDrink{public://煮水v......
  • Java抽象类和接口详解
    1.抽象类的概念和语法实现 当一个类中的信息不足以描述一个具体的对象的时候,我们可以将这个类定义为抽象类。那么我们怎么定义出一个抽象类呢?我们要采用一个关键字abstract。下面我们来看具体代码:abstractclassAnimal{publicStringname;publicintage;......
  • C#_继承_多态_抽象类_虚方法_密封类_静态类
    文章目录前言类的继承继承类的构造函数子类访问父类访问修饰符测试多态_函数重载多态_运算符重载可重载与不可重载的运算符抽象类虚方法new和override密封类和静态类结构体上期习题答案本期习题前言C#是面向对象的编程语言,面向对象编程的四项基本原则:抽象:将......
  • Java 面向对象编程进阶四(多态、抽象方法抽象类)
    目录多态(polymorphism)多态和类型转换对象的转型(casting) 类型转换异常向下转型中使用instanceof final关键字抽象方法和抽象类抽象类和抽象方法的基本用法多态(polymorphism)        多态指的是同一个方法调用,由于对象不同可能会有不同的行为。现实......
  • 接口和抽象类的区别
    接口和抽象类的区别修饰的关键字不同:接口interface,抽象类abstractclass抽象类本质也是一个类,某个类只能只能继承一个抽象类(类的单继承),但可以实现多个接口抽象类只能继承于一个类,但接口可以继承多个接口(类单继承,接口多继承)抽象类中的可以有抽象方法和普通方法,接口中除了......
  • java中的抽象类不能被实例化,那为什么还有构造方法
    java中的抽象类不能被实例化,那为什么还有构造方法java中的类必须要有构造方法(无参和/或有参)(没有的话编译不过);如果没有显示定义,那编译器会默认给该类创建一个无参构造方法抽象类如果能实例化,那被实例化的这个对象就可以调用该类中定义的所有方法(包括抽象方法),但是抽象方法......