Java面向对象(四)

Java面向对象(四)

多态与抽象

多态:一个对象多种形式。指对象的多种形式和能力。(相同的行为不同的表现形式)
  • 分类:
    • 静态多态:在编译期间,程序就能决定调用哪个方法。方法的重载就表现了静态多态。
    • 动态多态:在程序运行期间,才能决定调用对象的哪个方法。
    • 相同点:
      都是方法的多态,在代码执行程序中调用不同的方法达到不同的效果。
    • 区别:
      (1)、静态多态利用重载来实现的,动态多态是重写来实现的,静态多态一个类的多种方法,
      (2)、动态多态在运行的时候在决定执行的某个子类里的方法,将多态的方法分配到每个子类里面。

在继承环境下,父类对象引用指向子类对象(在操作的时候并不知道具体的子类内容,父类给我们提供了行为,当代码运行的时候决定执行那个行为,包括执行父类的行为还是子类的行为)

特点:

  • (1)父类对象可以引用指向子类对象,也可以指向本类对象。
  • (2)多态指方法的多态:创建本类对象调用就是本类方法,创建子类的对象就是调用子类的方法。
  • (3) 子类没有重写父类的方法,默认调用子类继承的方法(父类的方法)。
  • (4)只能父类对象引向指向子类,反之不行。

对象的自动转换:
通过父类引向指向子类对象,其实子类自动转型成了父类的数据类型,在继承中子类重写了父类的方法,提供

对象的强制转换:
向上转型存在一定的缺陷,将子类转换成为父类,调用的时候只能调用父类的属性和行为,子类自己扩展的属性和行为无法使用,向下转型,可以调用子类继承的属性和方法,还可以调用扩展的内容。

instanceof :
java的多态性导致引用变量类型和实际引用的对象类型不一致,为了更加准确区分出具体引用的是什么类型的对象,java 引入 instanceof 运算符,来对对象的类型进行判断。
但是不推荐使用。

多态存在的三个必要条件:

  • (1)要有继承(两个类之间存在继承关系,子类继承父类)。
  • (2)要有重写(子类继承父类,子类一定要重写父类的方法)。
  • (3)父类引用指向子类对象。

异构集合:
在数组里面,可以存放不同的对象。(父类为数组的数据类型 ,可以存放父类和子类的对象)

抽象

在编写类时,通常会在类中定义一些方法,用来描述该类的的具体行为,在类的方法体中我们编写代码实现该类所要执行的行为。在继承关系中,子类可以重写父类的来覆盖父类的行为。当抽象到一定程度,我们发现父类没有必要进行实现化。这时可以用抽象类。
使用 abstract 关键字 可以声明一个抽象类 :

public abstaract class ParentClass {
	public abstract void parentMethod();
	public abstract void parentMethod1();
} 

特点:

  • (1)如果类中有抽象方法,当前类必须是抽象类。
  • (2)在抽象类中也可以定义普通方法。
  • (3)抽象方法必须有 abstract 关键字来修饰。
  • (4)父类的抽象方法在子类中必须重写,父类的成员方法可以不重写。
  • (5)如果子类也是个抽象类,可以不用重写父类的抽象方法。

区别:

  • (1)抽象类里面可以有抽象方法,也可以有普通方法,普通类只能有成员方法。
  • (2)抽象类和普通类的使用场景不同。
  • (3)当父类只知道子类包含哪些行为,但不知道行为的具体实现方法,这时就得用抽象类或当从多个类中抽象出的父类,利用父类作为子类的模板,从而避免子类的随意设计。
  • (4)抽象不能直接实例化,但是可以引用指向子类。
接口

抽象方法和常量定义的一个集合,从本质上讲,接口是一种特殊的抽象类,接口所定义的方法全是抽象方法,所定义的变量全是常量。

格式:

	public interface I接口名称 {
		//定义常量
		public static final double PI = 3.14;
		int M = 10; // 默认常量
		// 抽象方法
		public abstract void method();
		public void show();
		void welcome()
	}

在接口里,所有的方法都是抽象方法,可以省略 abstract 关键字,也可省略 public ,默认为 public。
调用接口用 implements 关键字
作用:

  • (1)接口里面定义的方法都是抽象方法,子类实现接口的方法,必须实现所有的抽象的方法,对子类做了个约束,不能让子类乱写方法,统一在接口中。
  • (2) 解决java中一个类中只能单继承的问题,一个类可以实现多个接口,弥补以前只能单继承的问题。
  • (3)实现接口也是一种继承。
  • (4) 一个类可以实现多个接口,完成多继承。
  • (5) 接口中声明的属性默认就是 public static final 类型。
  • (6) 接口中只能定义抽象方法。
  • (7) 接口可以继承其他接口,一个接口可以继承多个接口。
final 关键字

final 关键字可以用于修饰类、变量和方法,它有“无法改变的” 或“最终”的含义。
特性:

  • final 修饰的类不能被继承。
  • final 修饰的方法不能被子类重写。
  • final 修饰的变量(成员变量和局部变量)是常量,只能赋值一次。(变量为成员变量时,需要在定义变量是同时赋予初始值)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值