2021-03-22

继承.多态.抽象.接口

继承

  • 在java中,所有的类都默认直接或者间接继承object类
  • 继承:减少冗余(重复)
    如果很多类的属性丶 方法 重复出现, 重复–》父类,继承
  • a() this.a() :当前类a(),如果没 去父类找a()
    super.a() 直接在父类查找 代表父类对象的引用
    1.super必须只能出现在子类的方法或者构造方法中
    2.继承条件:只能在继承中使用
    构造方法
    this()本类的构造
    super()父类的构造
  • 通过this调用其他构造方法,只能放在第一行,super也必须放在第一行,所以两者不能共存

方法重写

  • Override//注解:有功能的注释,代表方法重写
  • 私有方法不能重写
  • 最好是非静态方法
  • 有继承关系
  • 方法名必须相同
  • 参数列表必须相同
  • 修饰词:范围可以扩大但不能缩小
  • 抛出的异常,可以被缩小不能扩大:ClassNotFoundException --> Exception(大)
//静态方法的调用
A a=new A();	B b=new A(); 方法调用和左边定义的数据类型有关
//非静态方法的调用
A a=new A();	B b=new A(); 结果仍然是子类所重写的方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dOkdwnhe-1616372392149)(C:\Users\宁智波带土\AppData\Roaming\Typora\typora-user-images\image-20210315214405407.png)]

静态方法和非静态差别很大,静态方法方法的调用跟向上向下转型有很大关系,而非静态方法指向的都是子类重写的对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9VLpQ6LQ-1616372392162)(C:\Users\宁智波带土\AppData\Roaming\Typora\typora-user-images\image-20210315214308546.png)]

多态的概述(记忆)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1pXAUMLJ-1616372392165)(C:\Users\宁智波带土\AppData\Roaming\Typora\typora-user-images\image-20210315215610485.png)]

多态就是同一个对象,在不同时刻表现出来的不同形态

  • 多态的前提
  • 要有继承或实现方法
  • 父类引用指向子类对象(向上转型)

多态注意事项

  1. 多态是方法的多态:属性没有多态
  2. 父类和子类,有联系 类型转换异常!ClassNotFoundException!
  3. 存在条件:继承关系,方法需要重写.
  4. 父类引用指向子类对象 父 对象=new 子类();
  • static 方法,属于类,它不属于实例
  • final无法被继承 常量;
  • private方法 私有方法
  • 多态是非常灵活的

1.2多态中的成员访问特点(记忆)

  • 成员访问特点
  • 成员变量

编译看父类,运行看父类

  • 成员方法

编译看父类,运行看子类

public class Animal{
public int age=40;
public void eat(){
System.out.print("动物吃东西")
}
}
  • 向上转型

    父类引用指向子类对象就是向上转型

  • 向下转型

    格式:子类型 对象名 = (子类型)父类引用;

    instanceof关键字

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0RpDia8M-1616372392173)(C:\Users\宁智波带土\AppData\Roaming\Typora\typora-user-images\image-20210316132859977.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wH3qqSpi-1616372392177)(C:\Users\宁智波带土\AppData\Roaming\Typora\typora-user-images\image-20210316133134363.png)]

    • 判断该对象是否属于该类型
    • 同级对象一般不能进行比较,比如关着一个爸爸的兄弟

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TPqczTaE-1616372392180)(C:\Users\宁智波带土\AppData\Roaming\Typora\typora-user-images\image-20210316133334980.png)]

    • 能不能编译通过主要看x和y的父子关系,有则通过没有报错,

    类型之间的转换

    • 类型之间的转换: 基本数据类型 从高到低需要强转,从低到高不需要


    static关键字

    satic{}静态代码块优先级最高,且只执行一次,一般可以用来进行初始化
    {}匿名代码块优先级第二
    第三优先级是构造方法
    
    //静态导入包
    import static java.lang.Math.random;
    import static java.lang.Math.PI;
    

    抽象类

    2.1抽象类的概述(一种和接口接近的约束)

    当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的表现,这个时候就需要抽象类了!

    在java中,一个没有方法体的方法应该被定义为抽象方法,而类中如果有抽象方法,该类必须被定义为抽象类

    2.2抽象类的特点(记忆)

    • 抽象类和抽象方法必须使用 abstract 关键字修饰

    • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类

    • 抽象类不能实例化,不能new

      抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态

    • 抽象类的子类

      要么重写抽象类中的所有抽象方法

      要么是抽象类

2.3抽象类的成员特点(记忆)

  • 成员的特点
    • 成员变量
      • 既可以是变量
      • 也可以是常量
    • 构造方法
      • 空参构造
      • 有参构造
    • 成员方法
      • 抽象方法
      • 普通方法

3.接口

3.1接口的概述

接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用

java中的接口更多的体现在对行为的抽象

3.2接口的特点(记忆)

  • 接口用关键字interface修饰

    public interface 接口名 {
        //接口中的所有定义的方法其实都是抽象的   public abstract是默认开头
        //所以以后的方法可以省略  只用写 void 方法()
        public abstrac void yao();
        void yao();
        
    } 
    
  • 类实现接口用implements表示

    public class 类名 implements 接口名 {}
    1
    
  • 接口不能实例化

    接口如何实例化呢?参照多态的方式,通过实现类对象实例化,这叫接口多态。

    多态的形式:具体类多态,抽象类多态,接口多态。

  • 接口的子类

要么重写接口中的所有抽象方法

要么子类也是抽象类

  • 只有规范!自己无法写方法~专业的约束!
  • 约束和实现分离:面向接口编程
  • 利用接口进行多继承

3.3接口的成员特点(记忆)

  • 成员特点

    • 成员变量

    • 接口里面定义的属性都是常量

      只能是常量
      ​ 默认修饰符:public static final

    • 构造方法

      没有,因为接口主要是扩展功能的,而没有具体存在

  • 成员方法

只能是抽象方法

默认修饰符:public abstract

2.8. Java中继承的注意事项(掌握)

  • Java中继承的注意事项
    1. Java中类只支持单继承,不支持多继承
      • 错误范例:class A extends B, C { }
    2. Java中类支持多层继承

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0U97cLPp-1616372392182)(C:\Users\宁智波带土\AppData\Roaming\Typora\typora-user-images\image-20210311221851701.png)]

3.5类和接口的关系(记忆)

  • 类与类的关系

    继承关系,只能单继承,但是可以多层继承

  • 类与接口的关系

    实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口

  • 接口与接口的关系

    继承关系,可以单继承,也可以多继承

    3.6抽象类和接口的区别(记忆)

    • 成员区别

      • 抽象类

        变量,常量;有构造方法;有抽象方法,也有非抽象方法

      • 接口

        常量;抽象方法

    • 关系区别

      • 类与类

        继承,单继承

      • 类与接口

        实现,可以单实现,也可以多实现

        • 接口与接口

        继承,单继承,多继承

        设计理念区别

        • 抽象类

          对类抽象,包括属性、行为

        • 接口

          对行为抽象,主要是行为

内部类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cayrq5AV-1616372392184)(C:\Users\宁智波带土\AppData\Roaming\Typora\typora-user-images\image-20210317093031346.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k1tfkODh-1616372392186)(C:\Users\宁智波带土\AppData\Roaming\Typora\typora-user-images\image-20210317093359663.png)]

  • 一个Java类中可以有多个class类,但是只能有一个public class
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HQRgKNsV-1616372392188)(C:\Users\宁智波带土\AppData\Roaming\Typora\typora-user-images\image-20210317093449253.png)]
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LmXfsdj1-1616372392190)(C:\Users\宁智波带土\AppData\Roaming\Typora\typora-user-images\image-20210317093641623.png)]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值