1.现有父类Father,子类Son
// instanceof是实例的意思
// father 属于 Father ,所以为真
System.out.println(father instanceof Father);
// son 继承了父类, 属于 Father ,所以为真
System.out.println(son instanceof Father);
// father 属于父类,父类不能属于子类 ,所以为假
System.out.println(father2 instanceof Son);
2.Father
package com.xinzhi;
public class Father {
// 所有的类都会有一个顶级的父类,object
// private仅支持本类
// protected可在父子类之间调用
public Father(String hobby) {
this.hobby = hobby;
System.out.println("父类的构造方法");
}
public void smoke(){
System.out.println("我爱抽中华!");
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
//本章重点
public void fight(Father father){
father.smoke();// 传进来值
this.smoke();// 调用方法
// father转儿子需要强转,儿子转父亲不需要强转,父亲强转之后,我们现在可以调用儿子的swim()
if (father instanceof Son ){
Son son = (Son) father;
son.swim();
}
System.out.println("打架");
}
}
3.Son
package com.xinzhi;
public class Son extends Father {
// instanceof是实例的意思
// father 属于 Father ,所以为真
System.out.println(father instanceof Father);
// son 继承了父类, 属于 Father ,所以为真
System.out.println(son instanceof Father);
// father 属于父类,父类不能属于子类 ,所以为假
System.out.println(father2 instanceof Son);
/**
* 构造子必须先构造一个父类,而且必须首先构造父类,必须是第一行
*/
public Son(){
super("烫头");
System.out.println("子类的构造器");
}
public void swim(){
// 想让父亲也抽烟,父类也叫超类
super.smoke();
// 游泳前先抽根烟
System.out.println("我的爱好是:" + getHobby());
}
/**
* @Override 注解,当子类重写父类的方法时,要加这个
*/
@Override
public void smoke(){
System.out.println("我爱抽红塔山");
}
}
3.Test
package com.xinzhi;
public class Test {
public static void main(String[] args) {
father.fight(father2);
father.fight(son);
}
}
4.结果
true
true
false
我爱抽中华!
我爱抽中华!
打架
我爱抽红塔山
我爱抽中华!
我爱抽中华!
我的爱好是:烫头
打架