面向对象(一)

多态

  1. 静态绑定与动态绑定
    静态绑定(静态联编): 在编译期完成,可以提高代码执行速度。静态绑定的方法包括:
  2. 静态方法
  3. 构造器
  4. private方法
  5. 用关键字super 调用的方法
    动态绑定(动态联编):指在“执行期间(而非编译期间)” 判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。 这虽然让我们编程灵活,但是降低了代码的执行速度。
    多态,polymorphism 即多种形态,模糊策略,以不变应万变,使用多态可以编写更加通用的代码。
    多态的概念发展出来,是以封装和继承为基础的。子类以父类的身份出现,但做事情时还是以自己的方法实现。
    相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。

3.实现多态的条件
要发生多态有三个必要条件:要有继承,要有重写,父类引用指向子类对象
父类是父类
子类是子类
子类是父类
父类不是子类
子类不是其他子类

4.做题四大原则:
1、继承链,自己没有找父亲;
2、编译看类型+确定方法表,运行找对象
3、就近最优原则:自己没有找父亲
4、发生多态,基类对子类的新增方法不可见

instanceof

向下转型—强制转换,是有风险的, 可能会出现类型转换异常ClassCastException,为了降低这种风险性,我们可以使用Java中的instance运算符,在强转前进行一次判断

结论
在引用数据类型中,只有有继承关系的类型才能进行类型转换;
类型转换只是转换看待对象的引用的类型,对象本身没有也不可能参与转换;
父类引用可以自动指向子类对象,但只能访问和调用到来自于父类的属性和行为;
子类的引用不能指向父类或其它子类对象,就算强转也会导致运行失败并抛出ClassCastException;.
把父类引用赋给子类引用,语法上必须使用强制类型转换,要想运行也成功还必须保证父类
引用指向的对象一定是该子类对象(最好使用instance判断后,再强转)。

抽象类

分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是方法功能声明相同,但方法功能主体不同。那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。
用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。

含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写
抽象类不能被实例化
抽象类除了包含抽象方法外,还可以包含具体的变量和具体的方法。类即使不包含抽象方法,也可以被声明为抽象类,防止被实例化。
抽象类不能被实例化,也就是不能使用new关键字来得到一个抽象类的实例,抽象方法必须在子类中被实现。

//有抽象方法的类也必须被声明为abstract
	public static void main(String[] args) {
		Teacher teacher=new Teacher("教师");
		teacher.work();
		
		Driver driver=new Driver("驾驶员");
		driver.work();
	}
}
//一个抽象类
abstract class People{
	//抽象方法
	public abstract void work();
}
class Teacher extends People{
	private String work;
	public Teacher(String work) {
		this.work=work;
	}
	@Override
	public void work() {
		System.out.println("我的职业是"+this.work);
	}
	
}
class Driver extends People{
	private String work;
	public Driver(String work) {
		this.work=work;
	}
	@Override
	public void work() {
		System.out.println("我的职业是"+this.work);
}```



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值