abstract modifier && Protect Access

本文详细解析了抽象类和抽象方法的概念及其应用场景,通过具体的例子说明了如何使用abstract关键字来定义抽象类和抽象方法,并探讨了继承抽象类时的不同选择。

abstract修饰符可以修饰

1. 方法(抽象方法)

  1.1 被abstract修饰符修饰,只有声明没有实现的方法.

2. 类

  2.1 被abstract修饰符修饰.

一般在类的层次图中处于高层的类,类信息不足以描述一个对象.对于现实世界中并没有对应的真正实例与之对应。如Person是一个抽象类,并没有真正的一个对象对应于Person类

View Code
//Person.java
public abstract class Person{
    public String getName(){
        return name;
    }
    public abstract String getDescription();
    private String name;  
}


//Student.java
public class Student extends Person{
   @Override
   public String getDescription(){
       return "Student major in " + major;
   }
   private String major;
}

//Employee.java
public class Employee extends Person{
   @Override
   public String getDescription(){
       return "Employee 's salary is : " + salary;
   }
   
   private double salary;
}

由于Person对象对于自己真正的描述并不清楚,所以对于getDescription的方法并没有足够的信息可以描述,也有将getDescription直接返回空字符串的方案,然而这样是不合理的,因为getDescription在语意上并不表明Person的真正描述。所以使用abstract类是更好的方案。因为这样就能保证抽象类是无法出现对应它的实例,然而可以声明一个抽象类的对象变量,根据多态的原则,该抽象类的对象变量只能引用具体类的对象。

继承抽象类有两种选择:

1. 实现所有的抽象方法,可以将继承类声明为具体类。(即使实现了所有的抽象方法,也是可以将该类标明为抽象类.保证该类不被初始化,当我们不希望出现某个类的对象实例之后)

2. 实现了部分的抽象方法,只能将该继承类继续标明为抽象类

 

 

Protect Access:

修饰字段(并不是一个十分好的选择):

  1.  因为字段被修饰为Protected之后,虽然外包的非继承类不能访问到该类的保护字段,然而对于这种被修饰的字段,是不受到保护的,因为对于继承的限定是没有的(该类被声明为final外)

        1.1 打破了封装,因为任何一个自己的类可以继承某类只是为了访问其保护字段。

修饰方法(一般来说这是有效的)

  1. 当某方法在基类中的实现并不具备在子类中使用的场景,而每个子类欲使用父类的语意,必须进行方法的覆盖的时候,那么将方法修饰为保护型的范围是比较合理的。

转载于:https://www.cnblogs.com/papertigerv5/archive/2012/10/17/2727212.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值