day08,09

1.多态

多态:一个事物在不同时刻体现出来的不同状态:
 * 
 * 水:固态,汽态 ,液态
 * Animal a = new Cat() ;
 *
 *对于多态的三个前提条件
 *
 * 1)条件1:必须有继承关系(如果没有继承关系,谈不上多态!)
 * 2)条件2:必须有方法重写
 * 子类出现了父类一样的 方法声明
 * 3)有父类引用指向子类对象:向上转型
 * Fu f = new Zi() ;
 * 多态的三个条缺一不可!
 *
 *
 *
 *多态的成员访问特点:
 * 成员变量:
 * 编译看左边,运行看左边
 * 成员方法(非静态的成员方法):
 * 编译看左,运行看右;由于存在方法重写,所以就运行最终的就是子类的成员方法
 * 静态成员方法:(静态方法算不上方法重写,静态直接跟类有关系!)
 * 编译看左,运行看左

例:



多态的好处(特点):
 * 
 * 1)提高代码的维护性(由继承保证)
 * 2)提高代码的扩展性(由多态保证)
 * 
 * java的开发原则:低耦合,高内聚

多态的弊端 

不能访问子类特有功能

如图


解决方法

1)创建子类的具体对象,来访问自己的特有功能;虽然可以解决多态的弊端,但是从内存角度考虑,需要创建子类对象,那么必须在堆内存开辟空间,
 * 耗费内存,浪费空间!
 * 2)既然多态的第三个前提条件:父类引用指向子类对象,那么可不可以将子类的引用指向父类对象呢?
 * 可以的:向下转型:将父类的引用强制转换为子类的引用:前提必须有父类的引用存在;
 * 向下转型必须依赖于向上转型!


 * 注意  一般情况下:向下转型使用不当会造成一个异常:
 * Throwable:
 * error:严重问题
 * Exception:
 * 编译时期异常:
 * 运行时期异常:RuntimeException
 *
 * 运行时期异常:
 * ClassCastException:类转换异常:org.westos_02_多态.Cat4 cannot be cast to org.westos_02_多态.Dog4
 * *


猫狗案例






2.抽象

抽象类的概念:
 * 每一个动物的吃和睡的功能不一样,不应该把动物类定义为一个具体类,而是给出一个声明(abstract)
 * 当一个类中如果有抽象功能(抽象方法)的时候,那么这个类一定要定义为抽象类!
 * 
 * 问题:一个抽象类中可以有非抽象方法吗?
 * 一个抽象类中可以抽象,也可以有非抽象的(作为一个判断题记忆!)
 *
 * 抽象类不能实例化:抽象类不能创建对象
 * 一个抽象类如何进行实例化:
 * 通过抽象类多态形式:父类的引用指向子类对象,通过子类进行初始化!
 * 抽象类的子类的特点:
 * 
 * 1)抽象类的子类是抽象类,那么没有意义!
 * 最终使用的就是通过子类进行对象初始化的,如果子类都被抽象修饰了,那么也不能创建对象,所以没意义
 *
 * 抽象类多态:
 * 强制子类必须重写当前抽象的父类中所有的抽象方法
 * 还可以提高代码的维护性(里面继承关系保证!)
 *
 *

抽象类的成员特点
 * 成员变量:
 * 可以是变量也可以是自定义常量
 * 构造方法:
 * 抽象类可以有构造方法:包括有参构造和无参构造
 * 作用:通过抽象类多态的形式:让子类进行数据的初始化
 * 成员方法:
 * 可以有抽象方法,也可以有非抽象方法
 *
 * 抽象类的成员方法特性:
 * 抽象方法:强制子类必须要做到一件事情:方法重写(覆盖)
 * 非抽象方法:由继承保证可以去提高代码的复用性
 * */

注意

 问题:
 * 一个类中如果没有抽象方法,那么这个类可不可以定义为一个抽象类呢?
 * 可以!为什么
 * 不能让其创建对象!
 * 
 * abstract不能和哪些关键字共同使用?
 * private 和abstract不能共同使用
 * final和abstract不能共同使用
 * static和abstract不能共同使用

tset:经理与员工


  接口的概念:
 * 接口体现的是一种:扩展功能: 比如:猫可以跳高(并不是所有的猫都具有跳高功能)
 *
 * 如何表示接口:
 * interface:接口interface 接口名{
 *
 * }
 * 接口里面的方法可以是非抽象方法吗?
 * 不可以,只能是抽象方法
 * 接口中不能有构造方法
 *
 * 接口的特点:不能实例化(不能直接创建对象)
 * 接口如何实例化:
 * 接口的子实现类:
 * 1)接口的子实现类是抽象类,没有意义,子类都不能创建对象了;实际开发中用的就是子类的对象进行初始化!
 * 2)接口的子实现类是非抽象类
 * 接口的实例化:就是通过子实现类对数据进行初始化!
 *
 * 接口的子实现类和接口的关系:implements:
 * 格式:
 * class 子实现类名    implments(实现) 接口名{
 
 *
 *

接口成员的特点:
 * 成员变量:
 * 只能是常量:存下默认修饰符:public static final (永远建议自己给出默认修饰符)
 * 构造方法:
 * 接口是没有构造方法的
 * 成员方法:
 * 接口中的成员方法默认修饰符:public abstract(永远建议自己给出默认修饰符)
 * 
 * 类,抽象类,接口

制作和使用API

打开API:
显示---->输入你查找的类
索引---->搜索

找到某一个类:
对该类的描述
看类结构:
看该类是否有字段(变量),构造方法(如何创建该类对象),方法(类的成员方法)
出现该类的版本号:




Scanner java.util.Scanner;

JDK5.0以后的新特性:自动拆装箱(int--->Integer,char--->Character),静态导入(导入的方法级别),可变参数,增强for循环(集合),枚举
JDK7.0也有新特性(匿名内部类:局部内部类访问局部变量特性:局部变量必须被final讲)

形式参数和返回值问题研究;
/**
 形式参数:
  基本数据类型,你要什么数据类型,在实际传参的时候就传什么数据类型;形式参数的改变对实际参数没有影响(String是引用类型和基本数据类型的效果一样String s ="abc")
  如果形式参数是引用类型:
具体类类:如果形式参数是一个具体类,那么需要创建该类对象
 
抽象类:如果形式参数是抽象类的情况,那么需要自定义一个抽象类的子类,来进行实例化(创建对象)!,创建对象的实质:抽象类多态!
接口:如果形式参数是接口情况,那么需要自定义一个接口的子实现类,然后通过接口多态的形式给接口进行实例化!(接口多态!)
                     
 
 返回值:
      具体类:直接返回该类对象(通常实际开发中使用的是匿名对象)
  抽象类:返回值如果是抽象类,需要的返回是该抽象类的子类对象
  接口:返回值如果是接口类型,需要的是返回该接口的子实现类对象(通过子实现类进行实例化!)

       形参是抽象类


       形参是接口

返回值是抽象类


返回值是接口


内部类;


 在一个类中定义另一个类,那么把这种情况:内部类:
  举例:
  在类A中定义一个类B,那么类B就是类A的内部类,同理,类A就是类B的外部类
 
  内部类是直接可以访问外部类的成员,包括私有
  外部类想要访问内部类的成员,必须通过创建内部类的对象访问该内部类的成员
 * */

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值