面向对象-多态-抽象类-接口(个人复习)

面向对象

一、多态

1.泛化

泛化就是抽象化,把具体的事物当作抽象的东西看待(把猫看成动物)。
泛化也叫向上转型,是通往多态的路口。

把子类对象看作父类对象,这样可行吗?
可行,自愿放弃了更丰富的信息。

这样做有用吗?
有用,我们可以用同样的类型处理不同的东西

注意:只有向上转型,没有向下转型。向下转型叫做强转,这样做很不安全!

注意:泛化指的是引用的泛化,不是对象的泛化,内存中的对象还是原来的对象,只是把引用的类型给改变了。

2.多态

(1)多态的概念
多态(Polymorphism)按字面的意思就是“多种状态”。
在面向对象语言中,接口的多种不同的实现方式即为多态。
简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

(2)多态的分类
Java中的多态,可以分为静态多态和动态多态。
静态多态就是指方法的重载。
动态多态是指“动态绑定”。而我们这里所说的多态,大多数是指动态多态。

(3)多态应该具备的条件
1.继承或者接口
2.子类重写父类方法
3.父类引用指向子类对象(泛化)

(4)动态绑定
所谓动态绑定,是指在编译期不能确定引用指向什么类型,而是在运行期选择具体的类型。

public class Animal{
	String name;
	public Animal(){
	}
	public void eat(){
	}
	public void sayHello(){
	}
}
public class Cat extends Animal{
	public void eat(){
	}
	public void sayHello(){
	}
}
public static void main(String[] args){
			Animal c = new Cat;
			c.eat();//动态绑定---绑定的是Cat类中重写的eat方法
}

总结
多态中成员方法的访问特点:编译看左边,运行看右边

(5)静态绑定
静态绑定是指编译期就确定调用的是父类中的成员。
静态不是针对类中的普通方法,而对于成员变量,静态变量,静态方法,private修饰的方法,采用的是静态绑定。

Animal c = new Cat();
c.eat();   //动态绑定
		
System.out.println(c.name);  //静态绑定
c.sayHello();  // 静态绑定

总结:
成员变量、静态方法、静态变量、私有变量等采用静态绑定
编译看左边,运行看左边

(6)多态带来的好处
提高了代码的维护性(继承保证)
提高了代码的可扩展性(多态保证)

二、抽象类

1.抽象方法

用abstract关键字修饰的方法,称为抽象方法
抽象方法的特点,只有方法声明,没有方法体
抽象方法的作用:被子类重写,为子类规定类方法的调用格式,具体操作内容等待子类区完成

2.抽象类

至少包含一个抽象方法的类叫抽象类。(用abstract修饰)
抽象类的特点:
抽象类不能被实例化。
抽象类唯一的作用就是被子类继承
继承抽象类的类,有责任去实现抽象类中的所有抽象方法。如果不实现,那么子类也必须声明为抽象类
抽象类中可以包含非抽象方法。

3.抽象类的作用

抽象类表达共性,提供了可被继承的范本,标准的制定者。
抽象方法也是表达共性,为多个继承类提供方法的调用格式规定。

4.抽象类的其他细节

1、抽象类不能创建对象,那么抽象类中是否有构造方法?
抽象类中一定有构造方法。主要为了初始化抽象类中的属性。通常由子类实现。

2、final和abstract是否可以同时修饰一个类?
一定不能同时修饰。因为:抽象类的作用就是被继承,而final修饰的类不能被继承

三、接口

1.接口

接口是虚而又虚的类,它只有方法的形式描述,没有任何实际内容。
可以声明实现了多个接口,接口是多重继承的替代品。

2.接口的特点

1、接口不能被实例化
2、接口用来被类实现
3、接口中可以定义属性和方法:
接口中的所有属性 默认的修饰符是 public static final,所以定义时必须赋值。
接口中的所有方法 默认的修饰符是 public abstract
4、接口没有构造方法

3.接口的语法

(1)接口的定义
格式

 interface 接口名{
     属性
     抽象方法
 }

(2)实现接口
格式

 类名 implements 接口{
      实现接口中的方法
 }

当一个类实现某个接口时,类中要对接口中的所有方法进行实现(添加方法体,完成方法)

4.实现多个接口

一个类只能继承一个父类,但能同时实现多个接口。
格式

 class 类名 extends 父类名 implements 接口1,接口2,……{
               //类的成员
}

5.接口继承接口

格式

子接口 extends 父接口1,父接口2,...{           
 }
 public interface Inter3 extends Inter1,Inter2{

}

6.提示

1.能用接口的地方,不用类。(面向接口编程
2.一个模块尽量少知道其它模块的信息,知道的越少,对今后的维护越有利。

7.抽象类和接口的区别

抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。
接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法。
接口中不能含有普通方法,而抽象类中可以存在普通方法。
一个类只能继承一个抽象类,而一个类却可以实现多个接口。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值