Java面向对象-抽象类和抽象方法

本文详细介绍了Java中的抽象类和抽象方法,包括它们的定义、特点和使用示例。抽象类通过abstract关键字标识,可以包含静态属性和方法,但至少有一个抽象方法。子类继承抽象类必须实现其抽象方法,除非子类也是抽象类。同时,抽象类不能实例化,主要用于作为模板。示例代码展示了抽象类的声明、构造器、抽象方法的实现以及子类的继承和方法重写。

1. 什么是抽象方法

1. 只有方法的声明,没有方法体;
2. 使用 abstract 关键字进行修饰。
public abstract class ClassA{
	//下面声明一个抽象方法
	public abstract void sayHello();
}

2.什么是抽象类

使用 abstract 关键字进行修饰的类就是抽象类。
/**
* 下面就定义了一个抽象类:使用abstract关键字修饰一下
*/
public abstract class ClassB {
    
}

3.抽象类的特点

// 1-3 点是普通的特征
1. 类的定义必须有 abstract 修饰符修饰;
2. 抽象类的属性 与普通类的属性完全一样,可以用 public、protected、(default)、private 修饰符进行修饰;
3. 抽象类的属性 同样可以用 static 进行修饰;
4. 抽象类的方法 与普通类的方法完全一样,可以用 public、protected、(default)、private 修饰符进行修饰;
5. 抽象类的方法 同样可以用static 进行修饰;
// 后面的几点特点是比较特殊的
6. 一旦类中声明了 抽象方法,则该类必须声明为抽象类!
7. 根据6中的描述,抽象类中不一定存在抽象方法;
8. 子类一旦继承了抽象类,则必须重写父类的抽象方法 或者 将自己也声明为抽象类;
9. 抽象类可以有构造器,但这个构造器只能被子类调用;
10.抽象类不可以实例化对象,即,不可以使用 new 来创建对象; 

4.代码实例

4.1 定义一个抽象类

package com.kuangu.project.statisticreport.domain;

/**
 * @Classname ClassB
 * @Description TODO
 * @Date 2021/7/15 16:57
 * @Created by NorthCastle
 */
public abstract class ClassB {

    // 1.与普通类相同的声明属性的方式
    public String nameA;
    protected  String nameB;
    String nameC;
    private String nameD;

    public static String nameE;


    // 2.与普通类相同的声明方法的方式
    public String sayHelloWorld(){
        return "Hello World!";
    }

    protected String sayHelloJava(){
        return "Hello Java!";
    }

    String sayHelloSpring(){
        return "Hello Spring!";
    }

    private String sayHelloSpringBoot(){
        return "Hello SpringBoot!";
    }

    public static String sayHello(){
        return "Hello";
    }

    // 3.声明抽象方法
    public abstract String sayHelloJDBC();


    // 4.构造方法
    public ClassB(){
        System.out.println("ClassB constructor");
        this.nameA  = "ClassB nameA";
        this.nameB  = "ClassB nameB";
        this.nameC  = "ClassB nameC";
        this.nameD  = "ClassB nameD";
        this.nameE  = "ClassB nameE";
    }
}

4.2 特点8的示例

package com.kuangu.project.statisticreport.domain;

/**
 * @Classname ClassBson
 * @Description TODO
 * @Date 2021/7/15 17:44
 * @Created by Northcastle
 */
public class ClassBson extends ClassB {
}

在这里插入图片描述

4.3 特点9,10的示例

package com.kuangu.project.statisticreport.domain;


/**
 * @Classname ClassBson2
 * @Description TODO
 * @Date 2021/7/15 17:45
 * @Created by NorthCastle
 */
public class ClassBson2 extends ClassB {

    private String nameA;

    /**
     * 构造方法 : 调用父类的构造方法
     *
     */
    public  ClassBson2(){
        super(); // 调用父类的构造器
        System.out.println(super.nameA);
        this.nameA = "sonNameA";
        System.out.println(this.nameA);
    }

    /**
     * 实现抽象父类中的方法
     * @return
     */
    @Override
    public String sayHelloJDBC() {
        super.sayHelloJava();
        return "Hello JDBC son";
    }
}

在这里插入图片描述

5.抽象类的作用

模板作用!
【具体的含义及使用在后续中进行更新】

6.完成

Congratulations!
You are one step closer to success!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值