java继承多态抽象简单实例_Java基础笔记-抽象,继承,多态

抽象类: abstract修饰

抽象方法必须定义在抽象类中,抽象类不能创建对象.

在抽象方法中可以不定义抽象方法,作用是:让该类不能建立对象.

特点是:

1.定义在抽象类中

2.方法和类都用abstract修饰,在抽象类中的方法不写abstract也默认的是抽象方法.

3.不能用new来创建对象,调用抽象方法没意义.

4.抽象类中的方法被使用,必须由子类覆写其所有的抽象方法后,才能建立子类对象进行调用.

如果子类只覆盖了部分的抽象方法.那么该子类还是一个抽象类.

5.抽象类不可以被实例化.

继承:(extends)

关键字:extends,一般用于类与类之间的所属关系.java中是单继承,多实现(implements).

让类与类之间产生关系,从而才有了多态的特性.

当两个类有了继承关系以后.就可以在子类中调用父类的方法和属性,一般使用 super 关键字.

其用法和this关键字类似.super调用的是父类的,而this是调用的方法本身的.

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 abstract classEmployee2 {3 privateString name;4 privateString id;5 private doublepay;6 //构造函数

7 Employee(String name,String id,doublepay)8 {9 this.name =name;10 this.id =id;11 this.pay =pay;12 }13 public abstract void work(); //抽象类.

14

15 }16

17 class NormalWorker extendsEmployee18 {19 NormalWorker(String name,String id,doublepay)20 {21 super(name,id,pay);22 }23

24 public voidwork()25 {26 System.out.println("NormalWorker Work");27 }28

29 }30

31 class Manager extendsEmployee32 {33 private doublebonus;34

35 Manager(String name,String id,double pay,doublebonus)36 {37 super(name,id,pay);38 this.bonus =bonus;39 }40 public voidwork()41 {42 System.out.println("Manager Work");43 }44

45 }46 classAbstractTest47 {48 public static voidmain(String args[])49 {50 Manager M = new Manager("lisi","0910",10000,5000);51 M.work();52

53 }54 }

View Code

多态:

向上转型:将子类的对象转给父类的引用.

向下转向;将父类转换成子类类型.

一般使用的是向上转型,向下转型会出现不安全的问题,例如,猫是动物,但是我们不能说动物就是猫.

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 /*

2 多态:3 人:男人,女人4 动物:猫,狗5 猫 m =new 猫();6 动物 m = new 猫();7 特点:提高代码的拓展.8 */

9 abstract classAnimal10 {11 abstract voideat();12 }13

14 class Cat extendsAnimal15 {16 public voideat()17 {18 System.out.println("吃鱼");19 }20 public voidcatchMouse()21 {22 System.out.println("抓老鼠");23 }24 }25

26 class Dog extendsAnimal27 {28 public voideat()29 {30 System.out.println("啃骨头");31 }32 public voidkanJia()33 {34 System.out.println("看家");35 }36 }37

38 class Pig extendsAnimal39 {40 public voideat()41 {42 System.out.println("饲料");43 }44 public voidswim()45 {46 System.out.println("游泳");47 }48 }49

50

51

52 classDuoTaiDemo53 {54 public static voidmain(String args[])55 {56 /*

57 Cat c = new Cat();58 c.eat();59 Dog d = new Dog();60 d.eat();61 Pig p = new Pig();62 p.eat();63 */

64 /*

65 function(new Cat());66 function(new Dog());67 function(new Pig());68 */

69 //Animal c = new Cat();//向上转型

70 function(newCat());71 function(newDog());72 function(newPig());73 }74 /*

75 public static void function(Cat c)76 {77 c.eat();78 }79 public static void function(Dog d)80 {81 d.eat();82 }83 public static void function(Pig p)84 {85 p.eat();86 }87 */

88 public static voidfunction(Animal a)89 {90 a.eat();91 }92 }

View Code

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 abstract classAnimal2 {3 abstract voideat();4 }5

6 class Cat extendsAnimal7 {8 public voideat()9 {10 System.out.println("吃鱼");11 }12 public voidcatchMouse()13 {14 System.out.println("抓老鼠");15 }16 }17

18 class Dog extendsAnimal19 {20 public voideat()21 {22 System.out.println("啃骨头");23 }24 public voidkanJia()25 {26 System.out.println("看家");27 }28 }29

30 class Pig extendsAnimal31 {32 public voideat()33 {34 System.out.println("饲料");35 }36 public voidswim()37 {38 System.out.println("游泳");39 }40 }41

42

43

44 classDuoTaiDemo245 {46 public static voidmain(String args[])47 {48 /*

49 Animal a = new Cat(); //向上转型50 a.eat();51 Cat c = (Cat)a; //向下转型,将父类的引用转成子类类型.52 c.catchMouse();53 */

54 function(newCat());55 function(newDog());56 function(newPig());57 }58

59 public static voidfunction(Animal a)60 {61 a.eat();62 if(a instanceofCat)63 {64 Cat c =(Cat)a;65 c.catchMouse();66 }67 else if(a instanceofDog)68 {69 Dog d =(Dog)a;70 d.kanJia();71 }72 else if(a instanceofPig)73 {74 Pig p =(Pig)a;75 p.swim();76 }77

78 }79 }

View Code

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 /*

2 练习:3 基础班学生:学习,睡觉.4 高级班学生:学习,睡觉.5 */

6 abstract classStudent7 {8 public abstract voidstudy();9 public voidsleep()10 {11 System.out.println("躺着睡.");12 }13

14 }15

16 classDoStudent17 {18 public voiddoSomething(Student stu)19 {20 stu.study();21 stu.sleep();22 }23 }24

25 class BaseStudent extendsStudent26 {27 public voidstudy()28 {29 System.out.println("base study");30 }31 public voidsleep()32 {33 System.out.println("站着睡");34 }35 }36

37 class AdvStudent extendsStudent38 {39 public voidstudy()40 {41 System.out.println("adv study");42 }43 }44

45

46

47

48

49 classDuoTaiTest50 {51 public static voidmain(String args[])52 {53 /*

54 BaseStudent bs = new BaseStudent();55 bs.study();56 bs.sleep();57 AdvStudent as = new AdvStudent();58 as.study();59 as.sleep();60 */

61 DoStudent ds = newDoStudent();62 ds.doSomething(newBaseStudent());63 ds.doSomething(newAdvStudent());64 }65 }

View Code

多态中成员的特点:

1.成员函数的特点; 在编译时,参阅引用型变量所属的类中是否有调用方法,有的话编译会通过,没有的话会编译失败

在运行时,参阅对象所属的类中属否有调用方法.

面试中可能遇见的问题.问调用显示结果.

成员函数(非静态的)在多态调用时,编译看左边,运行看右边.

静态函数,无论编译还是运行,都看左边

看了一下之前写的那篇笔记,感觉都没什么能写的了,不知道写些什么,越往后学感觉都是得理解的,越学越难的说,最近又没什么状态,只好慢慢来,慢慢学习了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值