面向对象------学习笔记(抽象类、接口、内部类)


学习来源:本次学习笔记根据哔哩哔哩网站尚硅谷里面的老师所讲课程所总结的。

抽象类与抽象方法

父类不再创建对象

abstract关键字

  1. abstract可以修饰的结构:类和方法。
  2. abstract修饰类:
    ①该类就不可以实例化了。
    ②构造器还在,父类自己没有用,但是子类还可以调用,要调父类的构造器。
    ③一般都会实例化抽象类的子类。
  3. abstract修饰方法:
    ①只有声明没有方法体 public abstract void drink();
    ②包含抽象方法的类一定是一个抽象类。但是抽象类中可以没有抽象方法。
  4. 父类有抽象类方法,子类继承父类会报错。
    解决办法:
    ①可以重写父类(直接父类和间接父类)所有的抽象类方法后,子类才可以实例化。
    ②如果没有重写父类的抽象方法,那么子类也应该是一个抽象类,需要用abstract修饰。
  5. abstract使用注意点:
    5.1 abstract 不能用来修饰属性,构造器等结构。
    5.2 abstract不能用来修饰private私有方法、静态方法(static不能重写)、final的方法(不能被重写)、final的类(不能被继承)

抽象类的匿名子类

复习:匿名对象
不声明变量直接new对象
抽象类的匿名子类:
①Person是一个抽象类对象,里面有两个抽象类方法:public abstract void sleep(){ };public abstract void drink(){ };
②Person是Man的父类。
②Person p = new Person(){ //抽象类的匿名子类
public abstract void sleep(){ sysout “睡的少”};
public abstract void drink(){sysout “喝得多” };
}

模板方法的设计模式

主要思想:在父类中把不确定的部分,易变的部分就用abstract抽象化,然后再系统的写一个方法流程(可以用一下final)。然后再写具体的子类,在子类中重写不确定的方法。最后在main方法中直接调用方法流程就行。

接口

概述

  1. 接口使用interface来定义。Java中类和接口是并列的。
  2. 是抽象类的延伸:在抽象类中,一般将不确定的部分,易变的方法抽象化,后面每个子类都必须重写抽象方法,假如有的子类根本不需要这个方法还是得必须去重写抽象方法,这就出现了冗余。那么可否把这部分易变的方法,拿出来放在另外一个类里面。这就产生了接口的定义。
  3. 父子类:子类是父类的一种。接口:是一种共有的方法。类和类之间:继承。类和接口之间:实现。接口和接口之间:继承。
  4. 怎样定义接口呢?
    4.1 JDK7及以前,只能定义全局常量和抽象方法。
    全局常量:public static final(可以省略)可以直接用接口名.属性调用。
    抽象方法:public abstract(可以省略)
    4.2 JDK7以后,可以定义静态方法和默认方法。
  5. 接口中不能定义构造器!!!不能实例化!!!
  6. 如果要实例化,那只能通过类。所以接口通过让类 实现(implements)的方法来用。实现类中实现(覆盖或重写)了接口中的所有方法(接口中都是抽象的),那么该实现类就能实例化了。如果实现类中实现(覆盖或重写)了接口中的部分方法(接口中都是抽象的),那么该实现类仍旧为一个抽象类,不能被实例化。
    语法:class AA extends BB implements CC,DD{ }
  7. 一个实现类可以实现多个接口,接口名中间用“,”隔开。
  8. 接口与接口之间也叫继承,但是和类继承不同的是,接口继承可以多继承。 语法:interface CC extends AA,BB
  9. 接口 使用上也有多态性。
  10. 接口是一种规范。
  11. 接口面向编程

接口应用

1.代理模式:Proxy。①代理类和被代理类,被代理类只需要对外展现必要的结构。代理类需要做更多事情,有更多的结构。②代理实现类都需要对接口中的结构实现。
2.工厂模式。

内部类

  1. 分类:
    成员内部类(static成员内部类和非Static成员内部类)
    局部内部类 (方法内、代码块内、构造器内)
    匿名内部类
  2. 成员内部类:
    ①是外部类的成员,可以调用外部类的结构。
    ②可以定义属性、方法、构造器等等
    ③可以用final修饰,表示此类不能被继承。不使用final就能被继承。
    ④可以被abstract修饰,表明类不能被实例化。
    ⑤内部类可以被static修饰,外部类不行。
    ⑥可以被4种权限修饰符修饰。
  3. 实例化成员内部类的对象。
    ①静态的内部类成员:
    Person.Man man = new Person.Man( );
    ②非静态的内部类成员:
    Person p = new Person( );
    Person.Woman w = p.new Woman( );
    在局部内部类的方法中,如果调用局部内部类所声明的方法中的局部变量,要求次局部变量声明为final的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值