抽象类 接口 多态

J2SE

抽象类abstract class

  • abstract 关键字修饰的 称为 抽象类

1. 为什么需要抽象类?

如果一部分类都具备共同的功能,就可以将该方法定义在父类中,
如果各子类对该功能的具体实现(或者不能准确描述定义)不同,
就可将该方法定义为抽象方法 该父类定义为抽象类

2. 抽象方法

  • abstract 关键字修饰的 非静态final 方法 称为抽象方法
public class Example{
        //抽象方法
       public abstract void method();
}
特点:
1. 抽象方法无具体实现
2. 如果一个类中有了抽象方法,说明这个类表示的事物也是描述不清的,需要定义为抽象类;
3. 抽象方法不可用 private 或  static ,final 关键字修饰
(表示不可被重写(final) 不参与继承(private) 如果是static只属于类 )

3.抽象类的特点

1. 抽象类无法实例化
2. 子类继承抽象类,必须实现父类的所有抽象方法,否则子类也必须定义为抽象类
3. 抽象类一定是父类
4. 抽象类中可定义:静态成员变量,非静态成员变量,代码块(静态|非静态),方法(静态|非精态),构造器,抽象方法
5. 抽象类不一定包含抽象方法,有抽象方法的类一定是抽象类
6. 如果一个类不包含抽象方法,但被允许继承不允许实例化,可讲该类定义为抽象类
7. 抽象类不可用final 修饰(表示不可被继承)

多态

  • 同一事物的不同表现形式 称为多态
    前提: 必须有继承关系 (因为多态实际就是 父类的多种具体表现形式 )
    体现: 父类型的引用指向子类实例
  1. 多态的优点:
1. 抽象性表述 
2. 高内聚 低耦合 (`High cohesion & Low coupling`)
3. 提高扩展性 代码复用性
  1. 多态的缺点
只能调用父类中声明的成员变量和方法,子类中的不能直接调用(多态的类型转换)

3.多态的类型转换

  • 自动提升类型
    在使用多态时,父类型引用指向子类型对象,相当于将子类型对象的类型提升为父类型,叫做向上提升类型;这个过程可以自动进行;
  public class Super{
    
  }
  public class  Child extends Super{
      public void hello(){
            
      }

      public static void main(String[] args){
            Super s = new Child(); //自动转型
            s.hello();
      }
  }

  • 强制向下转型

子类型的引用指向父类型的实例,相当于转换为子类型,这个过程需要强制转换
注意: 在强转向下转型时,务必确保引用对象是强转类型的子类型,否则将抛出RuntimeException:ClassCastException

public class Test{
    public static void main(String[] args){
          Super s = new Super();
          //强制转型
          Child c = (Child) s;
    }
}
  • instance of 运算符
    强制向下转型时经常会抛出类型转换异常:ClassCastException 如要避免抛出此异常,在转型时需要提前进行类型检查来判断类型的正确性

使用: Object instance of Class

注意:

如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。

但是instanceof在Java的编译状态和运行状态是有区别的:

在编译状态中:
class可以是object对象的父类,自身类,子类。在这三种情况下Java编译时不会报错。

在运行转态中:
class可以是object对象的父类,自身类,不能是子类。在前两种情况下result的结果为true,最后一种为false。但是class为子类时编译不会报错。运行结果为false。              

  1. 多态中类的成员
  • 多态中的成员,在编译期全部看父类,运行期只有非静态 函数看子类
编译时:
使用的所有成员(静态和非静态的)都要检查父类中有没有
运行时:
只有非静态函数使用的是子类中的,其他成员全  
部都是父类的

多态发生在父类型引用class和子类对象Object之间,所以静态成员不参与多态,编译和运行都看父类;
非静态成员,编译期都看父类,运行期,函数看子类;

接口interface

  • 声明: public interface Example(){}
  • 关键字: interface

注意:

1. 在接口中只存在 静态成员常量 和 抽象方法
2. 接口是抽象的,不可被实例化
3. 类与接口的关系是实现 使用关键字implements 实现接口的类称为实现类
4. 实现接口,必须实现接口中的所有抽象方法
5. 在Java中,类只能单继承,但可以多实现
6. 接口与接口之间可以存在继承关系
7. 接口没有构造器(constractor)

1.接口的多态性

  • 大多数情况下,以多态的形式应用接口
  1. 接口与抽象类的区别
  • 共同点: 接口和抽象类的共同点:都可以有抽象函数,都不能实例化
  • 不通点:
不同点 抽象类 接口
声明 abstract interface
结构 包含变量方法 只包含常量和抽象方法
构造器 true false
作用 抽象类描述的是继承体系中的共同的特征和行为,如果行为不确定,就定义为抽象函数; 接口描述的是不属于继承体系的共同的功能;接口可以用来定义规则;
继承性 单一继承和多重继承 接口和接口可以多继承和多重继承;接口和实现类可以多实现
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容