鱼C论坛

 找回密码
 立即注册
查看: 2338|回复: 0

[学习笔记] Java暑期学习Day20

[复制链接]
发表于 2017-7-24 21:26:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 马太效应 于 2017-7-24 22:04 编辑

今天是第20天,论注意身体的重要性 ,今天就把昨天写了又被卡掉的补上,再整理下之前敲的代码好了T T


                               
登录/注册后可看大图



①对象上下转型
1.向上转型:由子类转型为父类(继承图上向上移动),
不需要强制转换,总是安全的。
                 <
可能丢失方法,不会获取方法>


2.向下转型:与向上转型相反,不安全,需要强制转换
                    (可能需要instanceof操作符协助)


语法:boolean result=object instanceof class 。
         运算符instanceof通过返回一个boolean类型的值,用来判断Obect 是否是class类型的。


3.LSP(liskov替换原则):子类型必须能够替换掉它们的基类型
            
4.在敲代码时的发现:
  如果父类定义了一个有参的构造器,那么子类也要定义一个有参的构造器,且要在第一行书写super(...)

  如果父类既定义了有参的构造器,也定义了无参的构造器,那么子类会默认调用父类的无参构造器,意思就是不用自己再定义有参的构造器。
  如果父类没有定义构造器,那父类和子类调用的都是系统默认的无参构造器。


5.辅助理解代码

  1. package ploymorphism;

  2. public class AnimalDemo {
  3.         public static void main(String[] args) {
  4.        //父类的引用变量可以引用其子类对象
  5.                
  6.                 Animal ani1= new Dog("旺旺"); //向上转型
  7.                
  8.                 //向上转型是安全的,但可能会导致子类方法的丢失
  9.                
  10.                 //父类的引用变量只能调用父类中有的方法或子类重写的方法
  11.                 ani1.eat();
  12.                 //ani1.sleep(); The method sleep() is undefined for the type Animal
  13.                
  14.                 Animal ani2 = new Cat("招福猫");
  15.                 ani2.eat();

  16.                 //向下转型是不安全的
  17.                  //Cat cat=(Cat)ani1;   java.lang.ClassCastException
  18.                 if (ani2 instanceof Cat){
  19.                         System.out.println("注意身体");
  20.                         Cat cat=(Cat)ani2;
  21.                         cat.sleep();
  22.                 }
  23.                
  24.         }
  25. }

  26. class Animal {
  27.         private String name;

  28.         public Animal(String name) {
  29.                 this.name = name;
  30.         }

  31.         // 这是一个通用方法,由子类去实现
  32.         public void eat() {

  33.         }

  34. }

  35. class Dog extends Animal {

  36.         public Dog(String name) {
  37.                 super(name);
  38.         }
  39. @Override
  40.         // 对父类的方法进行重写
  41.         public void eat() {
  42.                 System.out.println("爱吃骨头的汪");
  43.         }
  44. public void sleep() {
  45.         System.out.println("爱睡懒觉的汪");
  46. }
  47. }

  48. class Cat extends Animal {

  49.         public Cat(String name) {
  50.                 super(name);
  51.         }

  52.         // 对父类的方法进行重写
  53.         public void eat() {
  54.                 System.out.println("爱吃罐头的喵");
  55.         }
  56.         public void sleep() {
  57.                 System.out.println("爱睡懒觉的猫唔");
  58.         }
  59. }
复制代码


结果是——
爱吃骨头的汪
爱吃罐头的喵
注意身体
爱睡懒觉的猫唔


评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 20:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表