java学习笔记day09

思维导图

final 、 多态 、 抽象类 、 接口都很重要

一、final






二、多态

多态中的成员访问特点⭐ 【P237】

多态的好处 【P239]

多态的弊端

向上转型、向下转型 ⭐【P241】


形象案例:孔子装爹

多态的问题理解:class 孔子爹 {public int age = 40;public void teach() {System.out.println("讲解JavaSE");}}class 孔子 extends 孔子爹 {public int age = 20;public void teach() {System.out.println("讲解论语");}public void playGame() {System.out.println("英雄联盟");}}//Java培训特别火,很多人来请孔子爹去讲课,这一天孔子爹被请走了//但是还有人来请,就剩孔子在家,价格还挺高。孔子一想,我是不是可以考虑去呢?//然后就穿上爹的衣服,带上爹的眼睛,粘上爹的胡子。就开始装爹//向上转型孔子爹 k爹 = new 孔子();//到人家那里去了System.out.println(k爹.age); //40k爹.teach(); //讲解论语//k爹.playGame(); //这是儿子才能做的//讲完了,下班回家了//脱下爹的装备,换上自己的装备//向下转型孔子 k = (孔子) k爹; System.out.println(k.age); //20k.teach(); //讲解论语k.playGame(); //英雄联盟

多态继承中的内存图解⭐⭐【P242】

多态中对象变化的内存图解 【P243】


多态的3道练习题【P245~P246】⭐

1.猫与狗

/*多态练习:猫狗案例
*/
class Animal {public void eat(){System.out.println("吃饭");}
}class Dog extends Animal {public void eat() {System.out.println("狗吃肉");}public void lookDoor() {System.out.println("狗看门");}
}class Cat extends Animal {public void eat() {System.out.println("猫吃鱼");}public void playGame() {System.out.println("猫捉迷藏");}
}class DuoTaiTest {public static void main(String[] args) {//定义为狗Animal a = new Dog();a.eat();System.out.println("--------------");//还原成狗Dog d = (Dog)a;d.eat();d.lookDoor();System.out.println("--------------");//变成猫a = new Cat();a.eat();System.out.println("--------------");//还原成猫Cat c = (Cat)a;c.eat();c.playGame();System.out.println("--------------");//演示错误的内容//Dog dd = new Animal();//Dog ddd = new Cat();//ClassCastException//Dog dd = (Dog)a;}
}

2.南方人与北方人

/*不同地方饮食文化不同的案例
*/
class Person {public void eat() {System.out.println("吃饭");}
}class SouthPerson extends Person {public void eat() {System.out.println("炒菜,吃米饭");}public void jingShang() {System.out.println("经商");}
}class NorthPerson extends Person {public void eat() {System.out.println("炖菜,吃馒头");}public void yanJiu() {System.out.println("研究");}
}class DuoTaiTest2 {public static void main(String[] args) {//测试//南方人Person p = new SouthPerson();p.eat();System.out.println("-------------");SouthPerson sp = (SouthPerson)p;sp.eat();sp.jingShang();System.out.println("-------------");//北方人p = new NorthPerson();p.eat();System.out.println("-------------");NorthPerson np = (NorthPerson)p;np.eat();np.yanJiu();}
}

3.我爱你(多层继承练习)

/*看程序写结果:先判断有没有问题,如果没有,写出结果多态的成员访问特点:方法:编译看左边,运行看右边。继承的时候:子类中有和父类中一样的方法,叫重写。子类中没有父亲中出现过的方法,方法就被继承过来了。
*/
class A {public void show() {show2();}public void show2() {System.out.println("我");}
}
class B extends A {/*public void show() {show2();}*/public void show2() {System.out.println("爱");}
}
class C extends B {public void show() {super.show();}public void show2() {System.out.println("你");}
}
public class DuoTaiTest4 {public static void main(String[] args) {A a = new B();a.show();B b = new C();b.show();}
}

三、抽象类

抽象类的成员特点

抽象类的案例

1.猫狗案例

//定义抽象的动物类
abstract class Animal {//姓名private String name;//年龄private int age;public Animal() {}public Animal(String name,int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//定义一个抽象方法public abstract void eat();
}//定义具体的狗类
class Dog extends Animal {public Dog() {}public Dog(String name,int age) {super(name,age);}public void eat() {System.out.println("狗吃肉");}
}//定义具体的猫类
class Cat extends Animal {public Cat() {}public Cat(String name,int age) {super(name,age);}public void eat() {System.out.println("猫吃鱼");}
}//测试类
class AbstractTest {public static void main(String[] args) {//测试狗类//具体类用法//方式1:Dog d = new Dog();d.setName("旺财");d.setAge(3);System.out.println(d.getName()+"---"+d.getAge());d.eat();//方式2:Dog d2 = new Dog("旺财",3);System.out.println(d2.getName()+"---"+d2.getAge());d2.eat();System.out.println("---------------------------");Animal a = new Dog();a.setName("旺财");a.setAge(3);System.out.println(a.getName()+"---"+a.getAge());a.eat();Animal a2 = new Dog("旺财",3);System.out.println(a2.getName()+"---"+a2.getAge());a2.eat();//练习:测试猫类}
}

2.老师案例

/*老师案例具体事物:基础班老师,就业班老师共性:姓名,年龄,讲课。分析:  基础班老师姓名,年龄讲课。就业班老师姓名,年龄讲课。实现:老师类基础班老师就业班老师
*/
//定义抽象的老师类
abstract class Teacher {//姓名private String name;//年龄private int age;public Teacher() {}public Teacher(String name,int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//抽象方法public abstract void teach();
}//基础班老师类
class BasicTeacher extends Teacher {public BasicTeacher(){}public BasicTeacher(String name,int age) {super(name,age);}public void teach() {System.out.println("基础班老师讲解JavaSE");}
}//就业班老师类
class WorkTeacher extends Teacher {public WorkTeacher(){}public WorkTeacher(String name,int age) {super(name,age);}public void teach() {System.out.println("就业班老师讲解JavaEE");}
}class AbstractTest2 {public static void main(String[] args) {//具体的类测试,自己玩//测试(多态)//基础班老师Teacher t = new BasicTeacher();t.setName("刘意");t.setAge(30);System.out.println(t.getName()+"---"+t.getAge());t.teach();System.out.println("--------------");t = new BasicTeacher("刘意",30);System.out.println(t.getName()+"---"+t.getAge());t.teach();System.out.println("--------------");//就业班老师t = new WorkTeacher();t.setName("林青霞");t.setAge(27);System.out.println(t.getName()+"---"+t.getAge());t.teach();System.out.println("--------------");t = new WorkTeacher("林青霞",27);System.out.println(t.getName()+"---"+t.getAge());t.teach();}
}

3.学员案例

/*学生案例具体事务:基础班学员,就业班学员共性:姓名,年龄,班级,学习,吃饭分析:基础班学员成员变量:姓名,年龄,班级成员方法:学习,吃饭就业班学员成员变量:姓名,年龄,班级成员方法:学习,吃饭得到一个学员类。成员变量:姓名,年龄,班级成员方法:学习,吃饭实现:学员类基础班学员就业班学员
*/
//定义抽象学员类
abstract class Student {//姓名private String name;//年龄private int age;//班级private String grand;public Student() {}public Student(String name,int age,String grand) {this.name = name;this.age = age;this.grand = grand;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGrand() {return grand;}public void setGrand(String grand) {this.grand = grand;}//学习public abstract void study();//吃饭public void eat() {System.out.println("学习累了,就该吃饭");}
}//具体基础班学员类
class BasicStudent extends Student {public BasicStudent() {}public BasicStudent(String name,int age,String grand) {super(name,age,grand);}public void study() {System.out.println("基础班学员学习的是JavaSE");}
}//具体就业班学员类
class WorkStudent extends Student {public WorkStudent() {}public WorkStudent(String name,int age,String grand) {super(name,age,grand);}public void study() {System.out.println("就业班学员学习的是JavaEE");}
}class AbstractTest3 {public static void main(String[] args) {//我仅仅测试基础班学员//按照多态的方式测试Student s = new BasicStudent();s.setName("林青霞");s.setAge(27);s.setGrand("1111");System.out.println(s.getName()+"---"+s.getAge()+"---"+s.getGrand());s.study();s.eat();System.out.println("--------------");s = new BasicStudent("武鑫",48,"1111");System.out.println(s.getName()+"---"+s.getAge()+"---"+s.getGrand());s.study();s.eat();//就业班测试留给自己玩}
}

4.员工案例

/*假如我们在开发一个系统时需要对员工类进行设计,员工包含3个属性:姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方法进行属性访问。分析:普通员工类成员变量:姓名、工号以及工资。成员方法:工作经理类:成员变量:姓名、工号以及工资,奖金属性成员方法:工作实现:员工类:普通员工类:经理类:
*/
//定义员工类
abstract class Employee {//姓名、工号以及工资private String name;private String id;private int salary;public Employee() {}public Employee(String name,String id,int salary) {this.name = name;this.id = id;this.salary = salary;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public int getSalary() {return salary;}public void setSalary(int salary) {this.salary = salary;}//工作public abstract void work();
}//普通员工类
class Programmer extends Employee {public Programmer(){}public Programmer(String name,String id,int salary) {super(name,id,salary);}public void work() {System.out.println("按照需求写代码");}
}//经理类
class Manager extends Employee {//奖金private int money; //bonus 奖金public Manager(){}public Manager(String name,String id,int salary,int money) {super(name,id,salary);this.money = money;}public void work() {System.out.println("跟客户谈需求");}public int getMoney() {return money;}public void setMoney(int money) {this.money = money;}
}class AbstractTest4 {public static void main(String[] args) {//测试普通员工Employee emp = new Programmer();emp.setName("林青霞");emp.setId("czbk001");emp.setSalary(18000);System.out.println(emp.getName()+"---"+emp.getId()+"---"+emp.getSalary());emp.work();System.out.println("-------------");emp = new Programmer("林青霞","czbk001",18000);System.out.println(emp.getName()+"---"+emp.getId()+"---"+emp.getSalary());emp.work();System.out.println("-------------");/*emp = new Manager();emp.setName("刘意");emp.setId("czbk002");emp.setSalary(8000);emp.setMoney(2000);*///由于子类有特有的内容,所以我们用子类来测试Manager m = new Manager();m.setName("刘意");m.setId("czbk002");m.setSalary(8000);m.setMoney(2000);System.out.println(m.getName()+"---"+m.getId()+"---"+m.getSalary()+"---"+m.getMoney());m.work();System.out.println("-------------");//通过构造方法赋值m = new Manager("刘意","czbk002",8000,2000);System.out.println(m.getName()+"---"+m.getId()+"---"+m.getSalary()+"---"+m.getMoney());m.work();}
}

抽象类的几个小问题

四、接口

接口特点

接口成员特点⭐【P257】

类与类、类与接口、接口与接口的关系【P258】

抽象类与接口的区别⭐

接口的两个案例⭐⭐⭐

1.猫狗跳高案例

/*猫狗案例,加入跳高的额外功能分析:从具体到抽象猫:姓名,年龄吃饭,睡觉狗:姓名,年龄吃饭,睡觉由于有共性功能,所以,我们抽取出一个父类:动物:姓名,年龄吃饭();睡觉(){}猫:继承自动物狗:继承自动物跳高的额外功能是一个新的扩展功能,所以我们要定义一个接口接口:跳高部分猫:实现跳高部分狗:实现跳高实现;从抽象到具体使用:使用具体类
*/
//定义跳高接口
interface Jumpping {//跳高功能public abstract void jump();
}//定义抽象类
abstract class Animal {//姓名private String name;//年龄private int age;public Animal() {}public Animal(String name,int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//吃饭();public abstract void eat();//睡觉(){}public void sleep() {System.out.println("睡觉觉了");}
}//具体猫类
class Cat extends Animal {public Cat(){}public Cat(String name,int age) {super(name,age);}public void eat() {System.out.println("猫吃鱼");}
}//具体狗类
class Dog extends Animal {public Dog(){}public Dog(String name,int age) {super(name,age);}public void eat() {System.out.println("狗吃肉");}
}//有跳高功能的猫
class JumpCat extends Cat implements Jumpping {public JumpCat() {}public JumpCat(String name,int age) {super(name,age);}public void jump() {System.out.println("跳高猫");}
}//有跳高功能的狗
class JumpDog extends Dog implements Jumpping {public JumpDog() {}public JumpDog(String name,int age) {super(name,age);}public void jump() {System.out.println("跳高狗");}
}class InterfaceTest {public static void main(String[] args) {//定义跳高猫并测试JumpCat jc = new JumpCat();jc.setName("哆啦A梦");jc.setAge(3);System.out.println(jc.getName()+"---"+jc.getAge());jc.eat();jc.sleep();jc.jump();System.out.println("-----------------");JumpCat jc2 = new JumpCat("加菲猫",2);System.out.println(jc2.getName()+"---"+jc2.getAge());jc2.eat();jc2.sleep();jc2.jump();//定义跳高狗并进行测试的事情自己完成。}
}

2.老师学生抽烟案例

/*老师和学生案例,加入抽烟的额外功能分析:从具体到抽象老师:姓名,年龄,吃饭,睡觉学生:姓名,年龄,吃饭,睡觉由于有共性功能,我们提取出一个父类,人类。人类:姓名,年龄吃饭();睡觉(){}抽烟的额外功能不是人或者老师,或者学生一开始就应该具备的,所以,我们把它定义为接口抽烟接口。部分老师抽烟:实现抽烟接口部分学生抽烟:实现抽烟接口实现:从抽象到具体使用:具体
*/
//定义抽烟接口
interface Smoking {//抽烟的抽象方法public abstract void smoke();
}//定义抽象人类
abstract class Person {//姓名private String name;//年龄private int age;public Person() {}public Person(String name,int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//吃饭();public abstract void eat();//睡觉(){}public void sleep() {System.out.println("睡觉觉了");}
}//具体老师类
class Teacher extends Person {public Teacher() {}public Teacher(String name,int age) {super(name,age);}public void eat() {System.out.println("吃大白菜");}
}//具体学生类
class Student extends Person {public Student() {}public Student(String name,int age) {super(name,age);}public void eat() {System.out.println("吃红烧肉");}
}//抽烟的老师
class SmokingTeacher extends Teacher implements Smoking {public SmokingTeacher() {}public SmokingTeacher(String name,int age) {super(name,age);}public void smoke() {System.out.println("抽烟的老师");}
}//抽烟的学生
class SmokingStudent extends Student implements Smoking {public SmokingStudent() {}public SmokingStudent(String name,int age) {super(name,age);}public void smoke() {System.out.println("抽烟的学生");}
}class InterfaceTest2 {public static void main(String[] args) {//测试学生SmokingStudent ss = new SmokingStudent();ss.setName("林青霞");ss.setAge(27);System.out.println(ss.getName()+"---"+ss.getAge());ss.eat();ss.sleep();ss.smoke();System.out.println("-------------------");SmokingStudent ss2 = new SmokingStudent("刘意",30);System.out.println(ss2.getName()+"---"+ss2.getAge());ss2.eat();ss2.sleep();ss2.smoke();//测试老师留给自己练习}
}

java学习笔记day09 final、多态、抽象类、接口相关推荐

  1. Java学习笔记3.7.1 抽象类、接口与多态 - 抽象类

    文章目录 零.本讲学习目标 一.引入抽象类 (一)提出问题 (二)解决方案 二.定义抽象类及抽象方法 三.案例演示抽象类与抽象方法 (一)创建抽象类与抽象方法 (二)测试抽象类能否实例化 (三)抽象类 ...

  2. Java学习笔记3.7.2 抽象类、接口与多态 - 接口

    文章目录 零.本讲学习目标 一.老版本接口定义 二.JDK8接口定义 (一)接口定义语法格式 (二)接口语法定义说明 三.接口案例演示 (一)接口的定义与实现 1.创建形状接口 2.创建圆类,实现形状 ...

  3. Java学习笔记类对象多态继承(下)

    面向对象(下) 1.类的继承 一.什么是继承,有什么用? 继承:在现实世界当中也是存在的,例如:父亲很有钱,几子不用努力也很有钱 继承的作用: 基本作用:子类继承父类,代码可以得到复用.(这个不是重要 ...

  4. JAVA学习笔记(第五章 接口与继承)

    一.什么是接口 接口就像是一种模板,接口中放着没有内容的方法,类要是使用接口就必须声明接口中的方法.下面继续以LOL游戏为例: LOL的英雄,有些能够使用物理攻击,有些能够使用魔法攻击击,有些则两种攻 ...

  5. 初始Java Java SE 包,继承,组合,多态,抽象类,接口

    目录 包 1.静态导入 2.将类放到包中 3.包的访问权限控制 继承 基本语法: 注意事项: protected 关键字 final 关键字 组合 多态 向上转型: 动态绑定 方法重写 重写的规则 : ...

  6. Java:Effective java学习笔记之 考虑实现Comparable 接口

    Java 考虑实现Comparable 接口 考虑实现Comparable 接口 1.Comparable接口 2.为什么要考虑实现Comparable接口 3.compareTo 方法的通用约定 4 ...

  7. java学习笔记03-封装 继承 抽象类 多态 接口

    封装:在类的属性设置时 使用private将数据隐藏.不允许使用a.xingming来调用数据,可以设置get和set函数来对数据进行查看和修改(在其中添加if的判断语句来控制该参数的修改权限和读取权 ...

  8. java学习笔记(十)—— 抽象类、接口、内部类

    在之前的学习中,父类其实就是子类的抽象了,比如老虎和兔子都可以被抽象成动物.抽象类是更进一步的抽象,而接口是在抽象类的基础上又抽象了一层. 一.抽象类和抽象方法 1.抽象方法只有方法名,没有方法体. ...

  9. java ee2019 11 5关于多态 抽象类 接口

    1 猫狗案例 多态版(继承版) class Animal{//成员方法private String name ; private int age ;//无参构造public Animal(){}//有 ...

最新文章

  1. Grails里DOMAIN类的一对一,一对多,多对多关系总结及集成测试
  2. python 事件通知模式_请问在 Python 的事件系统中,如何可以通过事件通知立刻终结一个正在运行的子线程?...
  3. MapReduce整体架构分析
  4. hub设备_五年内任何问题,直接换新,毕亚兹 USB3.0四口HUB分线器体验
  5. flash一直提示要重新安装,都已经是最新的了,但是还要求更新
  6. 【转】HDMI、DVI接口差异之解析
  7. ROS机器人021-机器人命令行发送cmd_vel话题及/cmd_vel geometry_msgs/Twist示例
  8. FEC【筷云早报】2020年3月16日星期一
  9. 访问ftp服务器不显示文件夹权限问题,访问ftp服务器显示无权限问题
  10. AE 打开各种格式文件
  11. 俏兔子大战傻贼鹰(刚开始接触是写的,一直在草稿箱)
  12. 量子力学概论第一章---波函数
  13. 广州火车站/东站接送客攻略 停车需谨慎
  14. 基于python的校园社团管理系统的设计与实现
  15. ICAN业务流程外包是在CRMservices的专业领导机构
  16. Unity 批量修改场景预制体,删除空Animation组件
  17. java黑皮书25.1----(树的高度)
  18. 将TensorFlow训练好的模型迁移到Android APP上(TensorFlowLite)
  19. 【ASP.NET教程-WP教程14】ASP.NET Web Pages - 发布网站:将您的应用程序带到全网
  20. IoT Master 物联大师

热门文章

  1. 宽带技术大比拼(转)
  2. Threadx 线程调度
  3. 活在当下不等于及时行乐
  4. RocketMq最强总结 带你rocket从入门到入土为安
  5. 云原生周报 | 百度开源千万级CPS压测软件 dperf;BFE Server v1.5.0 发布
  6. 关于蓝牙的知识,蓝牙5.0和蓝牙5.2
  7. #千锋逆战班,拼搏永向前#
  8. C++中set容器的基本使用----在B站听黑马程序员c++课程的记录
  9. 2009消费者最喜爱网站TOP100
  10. 设计模式综合-媒体播放器的实现