Java继承与多态的关系,关键字 “instanceof”的使用

Java继承与多态的关系:

继承是一种由已有的类创建型类的机制,需要用到关键字 import 来实现;

多态是面向编程的重要特征,有两种意义的多态:

1、一种多态是操作名称的多态,即类中有多个操作具有相同的名字,但这些操作所接收的信息类型必须不同(方法参数);实现代表:方法重载;

如下代码↗:

//方法重载
	void test(int x){
		System.out.println("输出x的值"+x);
	}
	void test(int x,int y){
		System.out.println("输出x+y的值"+(x+y));
	}
	void test(double x,int y){
		System.out.println("输出x*y的值"+(x*y));
	}

2、一种多态是和继承有关的多态,是指同一个操作被不同类型的对象调用时可能产生不同的行为;实现代表:方法重写;

如下代码↗:

//父类
public class methodRewrite {
	//被子类重写方法
	void Method(){
		System.out.println("父类的Method方法,被子类继承或重写");
	}
}
//子类
public class methodRewrite_Test extends methodRewrite {

	//对继承的父类方法进行重写
	void Method(){
		System.out.println("我重写了父类的Method方法,产生了自己的行为");
	}

	public static void main(String[] args) {
		
		methodRewrite_Test mrt = new methodRewrite_Test();
		mrt.Method();
	}
}

代码中 子类对父类的 Method() 方法进行了重写,从而产生了另一种行为;

对于继承:一个父类可以有多个子类,但是一个子类只能有一个父类;

所有继承与多态的关系就是:

通过继承机制,可以实现一种意义上的多态;

扩展:

有两种形式可以调用重写后的方法:

1、子类  ---》 重写方法  ---》子类对象.重写方法

2、子类  ---》 重写方法  ---》上转型对象.重写方法

如以上代码中,还可以改成:

//第一种:子类对象.重写方法
methodRewrite_Test mrt = new methodRewrite_Test();
		mrt.Method();

//第二种:上转型对象.重写方法
methodRewrite mr = new methodRewrite_Test();
	    mr.Method();

Java关键字 “instanceof”的使用:

1、Java关键字 instanceof 是Java独有的双目运算符,其左边的操作元是 对象,右边的操作元是 类;

如: 对象名 instanceof 类名

2、当左边的操作员(对象)是 右边的类 或 其子类所创建的对象 时,instanceof运算符的结果是 true,否则是 false ;

如下代码↗:

//创建父类
public class instanceof_Fa {
}
//创建子类
public class instanceof_Test extends instanceof_Fa {

	public static void main(String[] args) {
		//创建子类对象 it ,并判断
		instanceof_Test it = new instanceof_Test();
		boolean bo = it instanceof instanceof_Test;
		System.out.println("判断类instanceof_Test 是否为对象it所在的类或 所在类的父类: "+ bo);
		//创建子类对象 its ,并判断
		instanceof_Test its = new instanceof_Test();
		boolean bos = its instanceof instanceof_Fa;
		System.out.println("判断类instanceof_Fa 是否为对象its所在的类或 所在类的父类: "+ bos);
		
		//创建父类对象 iFa ,并判断
		instanceof_Fa iFa = new instanceof_Fa();
		boolean boFa = iFa instanceof instanceof_Fa;
		System.out.println("判断类instanceof_Fa 是否为对象iFa所在的类或 所在类的父类: "+ boFa);
		boolean boFas = iFa instanceof instanceof_Test;
		System.out.println("判断类instanceof_Fa 是否为对象iFa所在的类或 所在类的父类: "+ boFas);
		
        //创建其他类对象,并判断
		A as = new A();
                boolean lean = as instanceof A;  //正确
	//	boolean leanx = as instanceof instanceof_Fa;   //错误
        //报错:Incompatible conditional operand types A and instanceof_Fa
		
	}
}
class A{
	
}

代码输出结果:

判断类instanceof_Test 是否为对象it所在的类或 所在类的父类: true
判断类instanceof_Fa 是否为对象its所在的类或 所在类的父类: true
判断类instanceof_Fa 是否为对象iFa所在的类或 所在类的父类: true
判断类instanceof_Fa 是否为对象iFa所在的类或 所在类的父类: false

总结出:

自己对象 instanceof 自己类  ---》 true

子类对象 instanceof 父类  ---》 true

父类对象 instanceof 子类  ---》 false

一般类对象 instanceof 其他类  ---》报错:Incompatible conditional operand types A and 其他类

如:

       //创建其他类对象,并判断
		A as = new A();
                boolean lean = as instanceof A;  //正确
	//	boolean leanx = as instanceof B;   //错误
        //报错:Incompatible conditional operand types A and B

class A{
	
}
class B{
	
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值