day09面型对象:接口和内部类

@[toc]    

1 接口

1.1接口定定义

    接口;就是一种公共的规范标准,在Java中接口更多体现对行为抽象。

1.2接口特点

day09面型对象:接口和内部类_第1张图片

  • 接口不能实例化

    • 接口如何实例化,参照多态的方式,通过实现类对象实例化,这叫接口多态。
    • 多态的形式:抽象类多态,接口多态
    • 多态的前提:有继承或者实现关系;有方法重写,有父(类/接口)引用指向(子/实现)类对象
  • 接口的实现类

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

1.3接口的成员特点

  • 成员变量
    - 只能是常量
    - 默认修饰符: public static final
  • 构造方法
    - 接口没有构造方法,因为接口主要是对行为进行抽象的,是没有具体存在,一个类如果没有父类,默认继承自object()
  • 成员方法
    - 只能是抽象方法
    - 默认修饰符:public abstract

1.4接口案例

day09面型对象:接口和内部类_第2张图片
最后使用具体的类来实现接口
day09面型对象:接口和内部类_第3张图片

1.5抽象类和接口的区别

  • 成员区别
  • 抽象类(变量,常量;有构造方法,也有非抽象方法)
    - 接口(常量,抽象方法)
    - 关系区别
  • 类与类(继承,单继承)
    - 类与接口(实现,可以单实现,也可以多实现)
    - 接口与接口(继承,单继承,多继承)
  • 设计理念的区别
    - 抽象类(对类抽象,包括属性,行为)
    - 接口(对行为抽象,主要行为)
    day09面型对象:接口和内部类_第4张图片
    这样的设计都是无法解决的问题的day09面型对象:接口和内部类_第5张图片
    day09面型对象:接口和内部类_第6张图片

day09面型对象:接口和内部类_第7张图片

2内部类

2.1类名作为形参和返回值

  • 方法的形参是类名,其实需要的是该类的对象
  • 方法的返回值是类名,返回值是该类的对象。day09面型对象:接口和内部类_第8张图片

2.1抽象类名作为形参和返回值

  • 方法的形参是抽象类名,其实需要的是该类的子类对象

  • 方法的返回值是抽象类名,返回值是该类的子类对象。

  • 因为是抽象所以要创建一个对象。
    day09面型对象:接口和内部类_第9张图片

3内部类

3.1抽象类名作为形参和返回值

day09面型对象:接口和内部类_第10张图片
内部类的访问特点

  • 内部类可以访问外部类的成员,包括私有
  • 外部类,要访问内部类成员,必须要创建对象

3.1.1成员内部类day09面型对象:接口和内部类_第11张图片

在这里插入图片描述
私有之后的写法

public class Outer {
    private int num = 10;

    //    public class Inner{
//        public void show(){
//            System.out.println(num);
//        }
//    }
    private class Inner {
        public void show() {
            System.out.println(num);
        }
    }

    public void method(){
        Inner i = new Inner();
        i.show();


3内部类

3.1局部内部类

局部内部类是在方法中定义的类,所以外界是无法直接使用的,需要在方法内部创建对象并使用,该类可以直接访问外部类的成员,也可以访问方法内的局部变量。
day09面型对象:接口和内部类_第12张图片

day09面型对象:接口和内部类_第13张图片

3.1匿名内部类

本质:是一个继承了该类或者实现了该接口的子类匿名对象
day09面型对象:接口和内部类_第14张图片

public void method() {
        new inter(){
            @Override
            public void show() {
                System.out.println("匿名内部类");
            }
        };//标准格式

对象调用方法

new inter(){
                @Override
                public void show() {
                    System.out.println("匿名内部类");
                }
            }.show();

如果要写多个show方法的时候可以使用创建一个具体的对象。

 Inter i = new Inter(){
                @Override
                public void show() {
                    System.out.println("匿名内部类");
                }
            };
            i.show();
    }

在开发中的具体应用就是不用写那么多的类了

你可能感兴趣的:(黑马程序员,java基础)