抽象类和抽象方法(abstract)

1. 抽象类和抽象方法(abstract)的基本代码

用关键字abstract修饰的称为abstract类(抽象类)。 例如:

 abstract class A {
                //......
        }

关键字abstract修饰的方法称为abstract方法(抽象方法)

例如:

abstract int min(int x,int y);

2. abstract类有如下特点

●和普通的类相比,abstract类里可以有abstract方法。也可以没有。对于abstract方法,只允许声明,不允许具体实现,而且不允许使用final修饰abstract方法。

final关键字:加上之后该方法就不能被重写。

抽象方法(abstract)---就是用来被重写的

●对于abstract类,不能使用new运算符创建该类的对象,只能产生其子类,由子类继承该抽象类并创建对象、实现抽象方法。 ●如果一个类是abstract类的子类,它必须具体实现父类的所有的abstract方法

●抽象类中可以写构造方法。

例如:

public abstract class PayServiceAbstract implements PayService {
​
    public abstract void realPay(PayParams payParams);
}
public class AliPayServiceAbstractImpl extends PayServiceAbstract {
    @Override
    public void realPay(PayParams payParams) {
        System.out.println("支付宝支付处理中...");
    }
}


3. 理解抽象类的关键:

  • 抽象类可以抽象出行为标准(代码模版),这些行为标准、代码模版用抽象方法来表示,即抽象类封装了其子类必须要有的行为标准

  • 抽象类就是一个模版!!!!----- 可以用在设计模版模式中。

  • 抽象类声明的对象可以成为其子类的对象的上转型对象,调用子类重写的方法,即体现子类根据抽象类里的行为标准给出的具体行为。

4. 上转型对象

  • 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如:

    A a;  
    a = new B();  
    // 或者  
    B b = new B();  
    a = b;

    则称A类对象a子类B对象b的上转型对象。

特点

  1. 属性访问:

    • 上转型对象(如上述的a)不能操作子类B新增加的成员变量,即失去了对子类新增属性的直接访问、调用能力。但它可以操作子类继承或隐藏的成员变量。

    • 可以调用子类继承的或重写的方法。如果子类重写了父类的某个方法,则上转型对象调用该方法时,实际执行的是子类重写后的版本。

  2. 类型转换:

    • 上转型是自动的,不需要显式地进行类型转换。

    • 但如果需要将上转型对象再转换回其原始子类类型(即下转型),则需要显式地进行类型转换,并可能需要使用instanceof操作符来检查类型是否匹配,以避免ClassCastException

示例

以Java IO流为例,FileOutputStreamOutputStream的子类。当我们创建FileOutputStream对象并将其引用赋值给OutputStream类型的变量时,就发生了上转型:

OutputStream output;  
output = new FileOutputStream(filename);

在这里,output就是FileOutputStream对象的一个上转型对象。

使用场景

  • 当我们不需要直接访问子类的特有属性和方法,而只需要使用父类定义的通用功能时,可以使用上转型来提高代码的通用性和扩展性。

  • 实现多态时,经常会使用上转型来允许父类类型的变量引用不同类型的子类对象,并在运行时根据对象的实际类型执行相应的方法。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值