• 关键词instanceof、重写、继承、多态


    1、instanceof关键词
       A instanceof B是用来判断内存中的实际对象A是不是B类型(具体事例看3小节代码)

    2、重写条件:
       1、继承关系
       2、子类重写父类方法
       3、方法名一样,参数个数和类型一样
       
    3、继承
       子类Student继承父类Person,实例化子类对象student的时候,在堆中会为其分配内存空间,在其内存空间中再划分一部分空间作为实例化一个父类new Person()的内存空间,这个父类对象的属性方法只为子类对象student服务
       
       装箱和拆箱
       public class Person {

        String name;
       }

       public class Student extends Person{

        int height;

        public void study() {
            System.out.println("学习");
        }
       }
       
       public class Test05 {

        public static void main(String[] args) {

            Person p = new Person();
            Student s = new Student();

            //instanceof可用于if判断中
            System.out.println(p instanceof Person);    //true
            System.out.println(s instanceof Student);    //true
            System.out.println(s instanceof Person);    //true
            System.out.println(p instanceof Student);    //false
            
            //装箱

            //当把Student对象赋值给Person类型引p1时,p1指向Student对象地址,但引用p1只能找到(识别)Person中自带的属性和方法
            Person p1 = s;
            //下面这个写法其实和上面的Person p1 = s;是一个意思
            Person p2 = new Student();

            //拆箱
            //再把父类强制转换为子类(前提是:首先要有一个子类对象赋值给父类的引用)
            //s2指向对象p1地址,但是由于p1指向的是Student对象地址,所以s2指向的是Student对象地址,引用s2是Student类型可以找到Person和Student中自带的属性和方法
            Student s2 = (Student)p1;

            //注意:并不能直接把父类强制转换为子类
            //Student s3 = (Student)p;

            System.out.println(p1 instanceof Person);    //true
            System.out.println(p1 instanceof Student);    //true
            
            System.out.println(p2 instanceof Person);    //true
            System.out.println(p2 instanceof Student);    //true

        }

       }
    4、多态
       面向对象三大特性:封装、继承、多态
       多态存在的三个条件:
       1、子类继承父类
       2、子类重写父类方法
       3、父类的引用指向子类的对象

       小男孩玩宠物

       拆箱装箱简单实例:

       public class Boy {

        /**
         * Pet类、Bird类、Pig类 装箱拆箱
         * @param p
         */
        public void play(Pet p) {
            if(p instanceof Bird) {
                Bird d  = (Bird) p;
                d.birdEnjoy();
            }else if(p instanceof Pig) {
                Pig pig = (Pig) p;
                pig.pigEnjoy();
            }
        }
       }
       //宠物类
       public class Pet {
        public void enjoy() {
            System.out.println("叽叽叽叽~~~宠物很高兴");
        }
       }
       //小猪类
       public class Pig extends Pet{
        public void pigEnjoy() {
            System.out.println("哼哼哼哼~~~~小猪很高兴!");
        }
       }
       //小鸟类
       public class Bird extends Pet{
        public void birdEnjoy() {
            System.out.println("叽叽叽叽~~~鸟儿很高兴");
        }

       }

       public class BoyFun {
        public static void main(String[] args) {
            Boy boy = new Boy();
            Bird b = new Bird();
            Pig p = new Pig();
            boy.play(b);
            boy.play(p);
        }
       }

       运行:
       叽叽叽叽~~~鸟儿很高兴
       哼哼哼哼~~~~小猪很高兴!

       多态简单实例:
       public class Boy {

        public void play(Pet p) {
            p.enjoy();
        }
       }
       //宠物类
       public class Pet {
        public void enjoy() {
            System.out.println("叽叽叽叽~~~宠物很高兴");
        }
       }
       //小猪类
       public class Pig extends Pet{
        public void enjoy() {
            System.out.println("哼哼哼哼~~~~小猪很高兴!");
        }
       }
       //小鸟类
       public class Bird extends Pet{
        public void enjoy() {
            System.out.println("叽叽叽叽~~~鸟儿很高兴");
        }

       }

       public class BoyFun {
        public static void main(String[] args) {
            Boy boy = new Boy();
            Bird b = new Bird();
            Pig p = new Pig();
            boy.play(b);
            boy.play(p);
        }
       }

       运行:
       叽叽叽叽~~~鸟儿很高兴
       哼哼哼哼~~~~小猪很高兴!

  • 相关阅读:
    学习:ASP.NET中App_Code,App_Data等文件夹的作用(转)
    总结:CLR Via C#(第九章):属性与索引器
    总结:CLR Via C#(第八章):其他(方法传递、out、ref)
    Init Version
    Code 128 Barcode Font Advantage Package 的常见问题
    Skelta Workflow.NET 2004 R2
    GTP.NET 甘特图项目管理控件
    Code 128 Barcode Font Advantage Package 中如何手动加入起始符,结束符,校验符
    VectorDraw Professional v5.1.1.1043
    开篇
  • 原文地址:https://www.cnblogs.com/snzd9958/p/9452331.html
Copyright © 2020-2023  润新知