前言
Java中的继承、封装和多态知识点是学习java必备的基础知识,看似简单,真正理解起来还是有一定难度的,今天小编再次通过实例代码给大家讲解java 封装继承多态知识,感兴趣的朋友一起学习下吧。
继承
什么是继承,谈谈自己对继承的理解,继承是类与类之间的一直关系,类似于数学集合之中包含与被包含之间的关系,比如大学生属于学生,那么可以看成是大学生类 继承了学生类,那么大学生类就是学生类的子类(派生类),学生类是大学生类的父类(基类),同时要值得注意的是Java中的继承是单继承(多层次继承),多实现(接口),(理解成一个类不可能有两个爹,但是儿子可以继承父亲,父亲可以继承爷爷这种多层次)
public class Person{ public void eat(){ system.out.print("吃") } public void drink(){ system.out.print("喝") } //吃喝拉撒睡,省略掉中间的 public void sleep(){ system.out.print("睡") } } public class XiaoGuo extend Person{ protected void yellow(){ system.out.printh("找小姐姐") } public void gamble(){ system.out.print("小赌一把") } public void drink(){ system.out.print("酗酒") } } 复制代码
封装
什么是封装,谈谈自己对封装的理解,封装就是将类的信息(比如说类的属性)隐藏在类的内部,不允许外部程序直接访问。此时就要提到一个关键字private,他是一个权限修饰符,可以用来修饰成员(变量和方法),保护成员不被其他别的类来使用,如果需要被其他类来使用,那么需要提供对应的操作:a.提供get变量名()方法,用于获取成员变量的值 b.提供set变量名(参数),用于设置成员变量的值,同样也和get方法一样,都是用public来修饰(同时切记变量名的首字母一定大写)。
public class Man{ //对象属性的封装,一个人的姓名,年龄,妻子 private String name; private int age; private Woman wife; //男人对外界提供方法的封装,设置年龄,姓名,妻子,对外暴露自己的年龄,姓名,但没有暴露妻子 public void setWife( Woman wife){ this.wife=wife; } public void setAge(Int age){ this.age =age; } public void setName( String name){ this.name=name; } public String getName(){ return name; } public Int getAge(){ return age; } } public class Woman{ //对象属性的封装 private String name; private int age; private Man husband; //方法的封装, 女人 只对外暴露自己的姓名,年龄和丈夫都不暴露 public void setHusband( Man husband){ this.husband=husband; } public void setAge(Int age){ this.age =age; } public void setName( String name){ this.name=name; } public String getName(){ return name; } } 复制代码
多态
什么是多态,封装和继承几乎都是为多态而准备的,多态我个人理解成是java程序在运行中使用继承时的一种关系,比如方法重写,继承是多态的实现基础。
举例:我们可以说大学生是大学生:大学生 unst=new 大学生();
我们也可以说大学生是学生:学生 st=new 大学生();
这里大学生在不同的时刻表现出不同的形态,我认为这就是多态。
多态实现的前提和体现有以下几点:1.有继承关系 2.有方法重写 3.有父类引向子类对象
package com.aiit.java_extends; public class Animal { public int eyesNum; //动物的眼睛 public Animal() //无参构造方法 { System.out.println("我是没人疼(无参)的动物,嘤嘤嘤~"); } public Animal(int eyesNum) //有参构造方法 { this.eyesNum=eyesNum; System.out.println("我是有人疼的(有参)小动物哦"+"我有"+eyesNum+"只眼睛,我最漂亮了~"); } public void breath() //动物的方法 { System.out.println("动物会呼吸"); } } 复制代码
package com.aiit.java_extends; public class Tiger extends Animal { private int tigerLegsNum; //私有化老虎的属性 Tiger() //无参构造方法 { System.out.println("我一只没人疼(无参)的老虎,嘤嘤嘤~"); } Tiger(int tigerLegsNum) //有参构造方法 { super(2); this.tigerLegsNum = tigerLegsNum; System.out.println("我是有人疼的(有参)老虎哦"+"我有"+eyesNum+"只眼睛和"+tigerLegsNum+"条腿,我跑的可快了~"); } public void breath()//重写老虎呼吸方法 { System.out.println("老虎会呼吸"); } } 复制代码
package com.aiit.java_extends; public class Chicken extends Animal{ private int chickenLegsNum;//私有鸡腿的数量 Chicken() //无参构造方法 { System.out.println("我是没人疼(无参数)的小鸡,嘤嘤嘤~"); } Chicken(int chickenLegsNum) //有参构造方法 { super(2); this.chickenLegsNum = chickenLegsNum; System.out.println("我是有人疼(有参)小鸡哦"+"我有"+eyesNum+"只眼睛和"+chickenLegsNum+"条腿,我的腿可是某些小姐姐的最爱哦~"); } public void breath() //鸡的私有方法 { System.out.println("小鸡会呼吸"); } } 复制代码
package com.aiit.java_extends; public class AnimalTest { public static void main(String[] args) { Animal an = new Animal(); Animal Tg = new Tiger(); Animal ch= new Chicken(); System.out.println("----------------------------分割线-----------------------------"); an.breath(); System.out.println("----------------------------分割线-----------------------------"); Tg.breath(); System.out.println("----------------------------分割线-----------------------------"); ch.breath(); } } 复制代码
仔细研究一下这个Demo,分别是通过Animal类的实例化的对象,调用的三个breath()方法。然而他们输出都是Animal子类下的breath()方法。所以,这就体现出Animal的多种状态。即父类引用指向子类对象!这就是所谓的多态吧~
建议与总结
1.建议字段的访问权限能给小绝不给大,能使用private修饰的字段一定要用private,提高安全性。
2.继承的层次不要太深,建议最多继承三层,使用final修饰可以让类无法被继承。
3.抽象类的出现就是为了继承之后重写发生动态绑定。
4.能使用接口就不要使用抽象类,因为类只能单继承,但是接口可以“多继承”,更加的灵活。
5.多态的核心都是让调用者不必关注对象的具体类型. 这是降低用户使用成本的一种重要方式。
6.抽象类和接口的核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中不能包含普通方法, 子类必须重写所有的抽象方法。
7.接口中的方法和字段定义都只写必要部分,尽量简洁像博主上面一样