java开发基础day11

1.抽象类与抽象方法

1.格式

public abstract 返回值类型 方法表(参数列表);   //直接分号结束此方法。

2.抽象类定义

public abstract class 类名{}

1.1.注意事项

①、抽象类不能实例化。②、抽象类中不一定有抽象方法,有抽象方法的一定是抽象类

③、可以有构造方法。④、抽象类的子类要么重写抽象类中所有的抽象方法,要么是抽象类

1.2多态与抽象类的区别

简单理解(一个是类的多种形态,一个是类中行为的多种形态)

  • 目的:多态的目的是允许通过统一的接口来使用不同类型的对象,而抽象方法的目的是定义一个必须由子类实现的方法模板
  • 实现:多态可以通过继承和接口实现,而抽象方法则通过在抽象类或接口中声明来实现。
  • 使用场景:多态用于运行时动态绑定,而抽象方法用于定义类的行为规范,要求子类必须实现。
  • 强制性:多态不是强制性的,子类可以选择不重写父类的方法;而抽象方法则是强制性的,子类必须实现抽象方法
2.接口
2.1接口的定义与使用

接口就是一种规则,是对行为的一种抽象。

2.2接口与类之间的关系

在类与接口的实现过程中,一个类要实现多个接口,必须要重写接口中所有的抽象方法。

接口与接口中,所实现的接口是最底层的接口。那么它必须将父类以上所有的抽象方法也都一一实现。

2.3接口扩展<默认方法>

默认方法格式:public default 返回值类型 方法名(参数列表){}

①、默认方法不是抽象方法,所以不强制被重写。但如果被重写,重写时需要去掉default关键字

②、public可以省略,default不能省略

③、如果实现了多个接口,多个接口中存在相同名字的默认方法,子类必须对该方法进行重写。

静态方法格式:public static 返回值类型 方法名(参数列表){}

①、静态方法只能通过接口名去调用,不能通过实现类名或者对象名去调用。(Inter.show)

在多个接口实现的多个方法中,可能会存在重复的代码。

对于默认的方法,可将重复代码抽象成为普通的私有方法。

对于静态方法,可将重复代码抽象成为静态的私有方法。

2.4 接口适配器

当一个接口中抽象方法过多时,实际只需要一部分时,可以使用适配器模式。

1.编写xxxAdapter,实现对应的接口

2.对接口中的抽象方法实现空实现

3.让真正的实现类继承中间类,并重写需要用的方法。

4.为了避免其他类创建适配器对象,中间的适配器需要用abstract进行修饰。

3.内部类

类的五大成员:属性、方法、构造方法、代码块、内部类

3.1内部类概念

写在一个类里面的类叫做内部类。(B类是A类的一部分,且B存在没有意义)

3.2成员内部类

可以被private,default,protected,public,static修饰

当成员内部类被private修饰时,创建变量时不能够直接调用,需要创建get的变量方法,而后再用创建的对象去调用。

3.3获取成员内部类的两种方式 

①.成员变量被非私有修饰时,可直接创建对象并调用。

Outer.Inner oi=new Outer().new Inner();       

②.成员变量被私有方式修饰时,可直接创建对象并调用。

1.用get方法调用直接输出

Outer o=new Outer();

System.out.println(o.getInstance());

=====================================================================

2.用object接收,Inner作为私有变量,外界不知道它的存在

Outer o=new Outer();

Outer.Inner inner=o.getInstance();<错误表达>

Object inner=o.getInstance();<正确表达>

JDK16以前在内部类中无法定义静态变量 ,JDK16以后才可以。

3.4内部类的逐级调用

内部类对象中有隐藏的外部类的地址值。

Outer.this是调用外部对象的地址值。this是调用者的地址值。

3.5静态内部类
package a07;
public class Outer {
    int a = 10;
    static int b = 20;
    static class Inner {  //①.静态内部类也是成员内部类中的一种
        public void show1() {      //②.静态内部类可以访问外部类中的静态变量和静态方法
            Outer o = new Outer();
            System.out.println(o.a); //③.如果需要访问非静态的需要创建外部类的对象
            System.out.println(b);
        }
    }
} 

3.6局部内部类

写在方法中,与int name变量名称同级。

3.7匿名内部类

1.格式

 new 类名或者接口(){

      重写方法;

};

=====================

//代码演示

new Swim() {      //创建对象<此处也为类的开始>

    @Override     //方法的重写

     public void swim(){   

     System.out.println;

   }

};                 //<此处为类的结束>

//同时蕴含着实现关系(后面的大类实现了swim接口) 

这个整体实际上是一个对象,真正的类是后面大括号里面的那部分。如果括号前面是类,那便是继承关系,如果前面是接口那就是实现关系。(所以实质就是一个类的子类对象或者是接口的实现类对象)

3.8匿名内部类隐藏了名字的内部类,可以写在成员位置,也可以写在局部位置。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值