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.匿名内部类



浙公网安备 33010602011771号