Java学习笔记 9 - 面向对象基础(继承、多态 )

本文主要内容
1、继承 extends
2、抽象 abstract
3、接口 interface
4、多态
5、instanceof关键字

01 继承 extends

A、继承的格式:class 子类 extends 父类 {}
B、继承注意事项
1、子类继承父类后,将直接拥有父类所有非私有的属性和方法
2、java中类只能单继承,不能多继承,但是可以多层继承(一个类的父类可以再去继承另外的父类)。
class A{}
class B{}
class C extends A,B{} // C类不可以同时继承A类和B类
3、所有的类都直接或间接继承了Object类,多个类可以继承同一个父类
class A{}
class B extends A{}
class C extends A{} // 类B和类C都可以继承类A
4、继承的缺点是,类与类之间耦合度过高
5、子类、父类中出现同名变量或方法时,访问子类中的变量或方法时使用 this关键字,访问父类中的变量或方法时使用super关键字
6、子类的对象调用成员变量的时候,子类自己有,使用子类,子类自己没有调用的父类
C、重写override
1、子类重写(override)父类的方法时,父类的私有方法,子类不能重写。并且override时必须要保证子类权限大于等于父类权限
2、子类方法和要重写的父类的方法:方法的方法名和参数列表都要一样
3、关于方法的返回值:
如果是基本数据类型,子类的方法和重写的父类的方法返回值类型必须相同
如果是引用数据类型,子类的方法和重写的父类的方法返回值类型可以相同或者子类方法的返回值类型是父类方法返回值类型的子类

02 重载与重写
   重载:与权限修饰符(public private 默认)无关
       方法名:重载的两个方法的方法名必须相同
       形参列表:形参类型的顺序不同、形参的个数不同、形参的类型不同。三者至少满足一个
       返回值类型:重载与返回值类型无关
   重写:
       子类方法的权限修饰符>=父类的方法的权限
       方法名: 子类方法和父类方法必须相同
       形参列表: 子类方法和父类方法的形参列表必须相同
       返回值类型:
           返回基本数据类型时,子类的方法和重写的父类的方法返回值类型必须相同
           返回引用数据类型,子类的方法和重写的父类方法返回值类型可以相同或者子类方法的
03 抽象 abstract

A、抽象类、方法定义的格式
abstract class 类名 { }
public abstract 返回值类型 方法名(参数);
B、抽象类的特点
1、抽象类用abstract修饰,抽象方法必须写在抽象类中
2、抽象类中可以没有抽象方法,可以定义带有方法体的方法
3、抽象方法,没有主体
4、抽象类不能new,只能被继承,然后子类对父类的抽象方法进行重写。如果子类不想重写父类的抽象方法,可以将自己定义为抽象类
5、测试抽象类,只能通过创建他的子类的对象,使用子类的对象调用方法
6、子类要实现抽象类中所有的抽象方法,才能创建子类对象,否则子类还是一个抽象类
7、abstract不可以和private、static、final一起使用。
8、因为抽象需要子类重写,如果父类是私有的,子类就无法重写。
C、抽象类的设计思想:保证继承体系的完整性,面对共性类型操作会更简单

04 接口 interface

A、接口定义格式
public interface 接口名 {
抽象方法1;
抽象方法2;
抽象方法3;
}
B、接口定义步骤
1、使用interface代替了原来的class,其他步骤与定义类相同
2、接口中的方法均为公共访问的抽象方法
3、接口中无法定义普通的成员变量
C、接口的特点
1、接口中定义的抽象方法格式为:public abstract 返回值类型 方法名(参数列表)
方法中,修饰符只能为public,如果不写,默认也是public,修饰符public abstract 可以省略
2、接口中不能定义普通的成员变量。只能定义常量,格式为:public static final 数据类型 变量名=值,定义时可以不写修饰符public static final
3、接口中常量的使用,可直接使用接口名.常量
D、接口的实现类
1、类与接口的关系为实现关系,即类实现接口,使用关键字:implements
2、类实现接口的格式
class 类 implements 接口 {
重写接口中方法
}
3、类实现接口的特点
1)接口的实现,需要重写接口中的全部抽象方法
2)实现类中的实现方法的权限必须和接口中一致。实现类中如果没有写方法的权限修饰
符,默认为default
3)如果实现类只实现了接口中的一部分方法,那么这个实现类是一个抽象类
4)一个类可以实现多个接口,并且不存在安全隐患,因为接口中的方法没有方法体,方法
的实现要依赖实现类
5)一个接口可以继承多个接口
E、接口的设计思想:暴露规则,降低耦合,提高扩展性
F、接口常见问题
1、java中有多继承吗?类中只能单继承,接口之间可以多继承
2、一个类如果实现类接口,有几种操作方法?
方法一:实现类是非抽象类,就需要重写接口中所有的抽象方法.
方法二:实现类也声明为抽象类,那么实现类可以不重写接口中的抽象方法。

04 接口和抽象类

A、相同点
1、都不能直接实例化
2、都包含抽象方法
3、都可以被继承
B、不同点
1、抽象类是事物中应具备的功能,接口是事物中的额外功能
2、一个类只能继承一个抽象类,但是可以实现多个接口
3、抽象类中提供非抽象方法的实现,接口只提供抽象方法
4、抽象类是这个事物中应该具备的你内容, 继承体系是一种 is..a关系
接口是这个事物中的额外内容,继承体系是一种 like..a关系
C、二者的选用
1、 优先选用接口,尽量少用抽象类;
2、 需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;

05 多态

A、多态调用的三种格式
对象的多态调用方式: 父类类型或者接口类型 变量 = new 子类的对象();
1、普通类的继承可以实现多态的引用
2、抽象类的继承可以实现多态的引用
3、接口的实现可以实现多态的引用
B、多态成员特点
多态调用方法时,运行的是子类的重写方法。
1、成员变量:编译用父类,运行用父类
多态引用时,调用成员变量时,编译时参考父类中是否有该变量,如果有编译成功,否则失败。运行时运行的是父类中的变量
简而言之:编译和运行都参考等号的左边。编译运行看左边。
2、成员方法:编译用父类,运行用子类
多态引用时,调用成员方法时,编译时参考父类中是否有该方法,如果有编译成功,否则失败。运行时运行的是子类中的重写的方法
简而言之:编译看左边,运行看右边。
总结:
1、多态调用时,调用的是成员变量无论是静态还是非静态,编译运行都是看父类。
2、多态调用时,调用的是静态方法,编译运行都是看父类,调用的是非静态方法,编译看父类运行看子类的重写方法。
C、多态的转型
1、多态的转型分为:向上转型与向下转型
2、向上转型:当有子类对象赋值给一个父类引用时,便是向上转型
使用格式:
父类类型 变量名 = new 子类类型();
如:Person p = new Student();
3、向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用
使用格式:
子类类型 变量名 = (子类类型) 父类类型的变量;
如:Student stu = (Student) p; //变量p 实际上指向Student对象
4、当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作,这时就可以使用向上转型。
当要使用子类特有功能时,就需要使用向下转型。在转换之前必须使用instanceof做类型判断。

06 instanceof关键字

A、类的比较:instanceof关键字,判断某个对象是否属于某种数据类型
B、使用格式: boolean b = 对象 instanceof 数据类型;
举例:
Person p1 = new Student(); // 前提条件,学生类已经继承了人类
Person p2 = new Student();
boolean flag = p1 instanceof Student; //flag结果为true
boolean flag2 = p2 instanceof Teacher; //flag结果为false
C、instanceof只能用于有实现关系的类比较

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

推荐阅读更多精彩内容

  • java继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继...
    863cda997e42阅读 651评论 0 1
  • 面向对象笔记 一、 对象在内存中的存放方法以及被调用过程 class文件首先被加载到方法区中的class文件内容区...
    VictorBXv阅读 454评论 0 2
  • 1 面向对象No6 面向对象 OO Object Oriented 编程时以对象为单元,封装数据和逻辑,以此提...
    征程_Journey阅读 1,116评论 0 2
  • 今日任务: 1,能够独立使用抽象类 2,能够独立使用多态 3,能够独立使用接口 4,能够理解适配器设计模式 1. ...
    Villain丶Cc阅读 1,339评论 0 17
  • 假如生活欺骗了你 干嘛假如啊? 言外之意,现在没被骗, 随时恭候欺骗的到来 殊不知, 从生至死, 无1分1秒未被骗...
    简佛系阅读 839评论 4 10