多态/抽象类/接口

一、多态

##1.多态的概述

  • 什么是多态?
    一个对象 ,在不同的时刻有不同形态
 父类引用 指向了 子类的对象

##2.多态的前提

  • 多态的前提?
* 必须有继承 或 接口实现的关系
* 方法的重写

多态三种格式:
	* 普通类的多态
		格式:父类 对象名 = new  子类对象();
	* 抽象类的多态
		格式: 抽象类 对象名 = new  抽象类子类对象();
	* 接口的多态

##3. 多态中成员变量的使用特点

  • 多态中成员变量的使用特点?
  • 多态中成员方法的使用特点?
总结:
	* 成员变量的使用特点
		口诀:编译看左边  运行看左边
	* 成员方法的使用特点	
		口诀:编译看左边  运行看右边

##4. 使用多态的好处

  • 无论右边new的是那个子类对象, 左边都不会发生变化
总结:
	* 使用多态有什么好处?
	    提高了代码的扩展性
	* 使用多态有什么弊端?
		访问不了子类特有的成员

##5. 多态的转型

  • 多态转型的分类?
总结:
	* 多态的向上转型
		 将小的数据类型 提升 大的数据类型
		    子类                 父类

		Animal an = new Cat();

		double d = 10;


	* 多态的向下转型
			将大的数据类型 转换为 小的数据类型
			
		* 什么情况下需要用到向下转型?
			使用子类特有的成员,需要向下转型
			
		* 向下转型的格式
			格式: 目标数据类型 变量名  = (目标数据类型)父类引用变量名;
					Cat        cat   = (Cat)        an;

		注意事项:向下转型 不要轻意的向下转型

二、抽象类

##6. 抽象的概念

  • 什么是抽象类?
  • 什么是抽象方法?
总结:
	1. 什么是抽象类?
		抽象方法的所在的类,必定是一个抽象类
	2. 什么是抽象方法?
		在一个类中没有方法体的方法,就是抽象方法

##7.抽象方法和抽象类的格式

  • 抽象方法定义格式
  • 抽象类定义格式
总结:

	1.抽象方法定义格式  
		public abstract 返回值类型 抽象方法名();
	2.抽象类定义格式
	    public abstract class 抽象类名{} 

##8.抽象类的特点
总结:
* 抽象类和抽象方法必须使用 abstract 关键字修饰
* 抽象类中不一定有抽象方法(非抽象方法,提高代码的复用性),有抽象方法的类一定是抽象类
* 抽象类不能实例化
抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态
* 抽象类的子类
要么重写抽象类中的所有抽象方法
要么是抽象类

##9.抽象类的成员特点
总结:
* 成员变量
变量 也可以 有常量
* 构造方法
可以有 给子类的访问使用,给父类数据进行初始化
* 成员方法
非抽象方法
抽象方法

 抽象类的思想:
 	强制子类重写父类中的抽象方法

##三、接口
##10. 接口概述

  • 什么是接口
    总结:
    接口就是一种公共规范的标准
    接口一定要暴露出来 --> 简单理解 是一份契约 [合同]

##11. 接口的定义基本格式

  • 接口的基本定义格式
格式:
	public interface 接口名{}

注意事项:
	接口与类之间的关系不在是继承而是实现的关系

##12. 接口的成员特点
总结:

* 成员变量
	 只有静态常量
	 默认有 public static final 来修饰的
	 这三个修饰符,还可以组合进行书写
  
* 构造方法
	没有构造方法
  	
* 成员方法
	只有抽象方法

	JDK7接口中可以有:
		常量
		抽象方法
	JDK8接口中可以有:
		默认方法
		静态方法
	JDK9接口中可以有:
		私有方法
			* 普通的私有方法
			* 静态的私有方法
  	
	单继承多实现

##13. 类和接口的关系

	类与类的关系 : 单继承 
	类与抽象类的关系 : 单继承
	抽象类与抽象类的关系 : 单继承
	类与接口的关系 : 实现而且可以多实现
	抽象类与接口的关系: 实现
	接口与接口的关系 : 多继承

##14. 抽象类和接口的区别

总结:
* 成员区别
	* 抽象类
	  	
	* 接口

* 关系区别
	* 类与类
	  
	* 类与接口
	  	
	* 接口与接口

* 设计理念区别
	* 抽象类(抽取多个类中的相同的成员)
	  	对类抽象,包括属性、行为
	  	抽象类通常是对同类事物相对具体的抽象,通常包含抽象方法,实体方法,属性.
	  	抽象类是一种模版式设计, 我们只需要将同类事物的一些相似的特征抽取出来,从而就形成了一个
	  	模版类


	  	
	* 接口(一个事物有额外的一个功能)
	  	对行为抽象,主要是行为


	  	public  abstract class Student{
	  		String name;
	  		int age;

	  		abstract eat();
	  		abstract sleep();
	  		// abstract studyJava();

	  	}

	  	// 将学习java的方法,定义到一个接口中

	  	public interface Study{
	  		public abstract studyJava();
	  	}

	  	class CangStudent extends Student implements Study {
	  		eat()
	  		sleep()
	  		public studyJava()
	  	}

	  	class LuStudent extends Student{
	  		eat()
	  		sleep()
	  	}

猜你喜欢

转载自blog.csdn.net/weixin_45818787/article/details/103191751