java面对对象编程(3)instanceof static 代码块 抽象类 接口 内部类

instanceof

判断一个对象是什么类型

Object > String
        //Object> Person > Teacher
        //Object> Person > Student
        Object object = new Student();

        //System.out.println(X instanceof Y);//x,y是否有父子关系,决定编译是否报错

        System.out.println(object instanceof Student);//true
        System.out.println(object instanceof Person);//true
        System.out.println(object instanceof Object);//true
        System.out.println(object instanceof Teacher);//false
        System.out.println(object instanceof String);//false

        Person person = new Student();

        System.out.println(person instanceof Student);//true
        System.out.println(person instanceof Person);//true
        System.out.println(person instanceof Object);//true
        System.out.println(person instanceof Teacher);//false
        //System.out.println(person instanceof String);// 编译报错

        Student student = new Student();

        System.out.println(student instanceof Student);//true
        System.out.println(student instanceof Person);//true
        System.out.println(student instanceof Object);//true
        //System.out.println(student instanceof Teacher);//
        //System.out.println(student instanceof String);//
//类型之间的转换 : 基本类型的转换  高低  64  32  16  高转低要强转
        //父类  子类


       // Student student = new Student();
        //高                    低(低转高很轻松)
        Person obj = new Student();
        //左边是obj的类型  Person类型  obj是Person类的具体实例
        //创建了一个Student的对象,上溯到Person引用  有些方法Student有,但是Person没有就不能使用了
        //Student类有go方法,Person类中没有go方法   obj.go();报错

        //obj 将这个对象转换为Student类型,我们就可以使用Student类型的方法了(当前为Person类型)

        //(Student)obj; +Ctrl +Alt +v
        Student student = (Student) obj;
        student.go();
        //两句话可以写成一句话
        ((Student)obj).go();

        //低转高
        //子类转换为父类,可能丢失自己本来的方法
        Student student1 = new Student();
        student1.go();
        Person person = student1;
        //person.go();  无法直接调用

/*
1.父类引用指向子类的对象   Person person = student1;
2.把子类转换为父类,向上转型
3.把父类转换为子类,向下转型,强制转换
4.方便方法的调用,减少重复的代码,简洁

抽象: 封转 继承  多态          抽象类  接口
 */

static

代码块

补充

抽象类

  • abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类
  • 抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类
  • 抽象类,不能使用new关键字来创建对象,它是用来让子类继承的
  • 抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的
  • 子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类

接口的定义与实现

  • 普通类:只有具体实现
  • 抽象类:具体实现和规范(抽象方法)都有!
  • 接口:只有规范!自己无法写方法 约束极强 约束和实现的分离:面向接口编程
  • 接口就是规范,定i的是一组规则,体现了“如果你是...你就必须...”的思想
  • 接口的本质是契约,就像法律,发布后要遵守
  • 面对对象编程的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计 模式都是只针对具备了抽象能力的语言(如c++ java c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象

内部类

  • 内部类就是在一个类的内部再定义一个类,比如 A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类
  • 1.成员内部类
  • 2.静态内部类
  • 3.局部内部类
  • 4.匿名内部类

posted @ 2021-03-01 00:08  弹琴的猫  阅读(50)  评论(0)    收藏  举报