java基础学习笔记《四》——抽象类、接口、内部类

一、抽象类的特点

      a、抽象类和抽象方法用abstract修饰

      b、有抽象方法的类一定是抽象类

      c、抽象类中不一定有抽象方法

      d、抽象类不能被实例化

      e、如果一个类继承抽象类,那么这个类必须要重写这个类中的所有抽象方法,除非这个类也是抽象类

疑问:抽象类不能被实例化,那抽象类是否有构造方法呢?有构造方法,是给成员变量赋值用的

作用:强制子类实现某些功能

成员特点: a、成员变量:可以有成员变量也可以有常量

                   b、构造方法:有构造方法,但不能被实例化

                   c、成员方法:可以有抽象方法,也可以有非抽象方法

格式:访问修饰符  abstract  class 类名 {         
        成员变量;
        成员方法;
}

二、接口的特点

       a、用关键字 interface修饰

       b、接口中的成员修饰符是固定的

            成员常量:public static final  数据类型 变量名=值;

            成员函数:public abstract 返回类型 方法名(); 

      c、接口不能被实例化;

成员特点:a、成员变量:接口中的成员变量都是常量,因为接口的成员变量有默认修饰符:public static final

                  b、构造方法:接口中没有构造方法,因为接口中的数据都是静态常量,而构造方法是给成员变量赋值用的

                  d、成员方法:接口中的方法都是抽象的并且没有方法体,默认修饰符:public abstract 

一个小知识点:cmd 编译时自动建包: javac -d . demo.java   

                        -d后面的点表示在当前目录建立包

                      运行:java 包名.demo

格式:访问修饰符  interface 接口名 [extends 其它接口]{
      public static final 数据类型  变量名=值;
      public abstract 返回类型 方法名();
}

三、内部类

      位置:a、成员位置-成员内部类     b、局部位置-局部内部类

      成员内部类:  访问格式   外部类.内部类 变量=new 外部类().new 内部类(); 

      成员内部类的修饰符:

              private :防止外部随意创建,外界不能调用,通过在外部类中定义一个方法在方法中实现内部类的创建与调用

        

class Outer{
    
     private class Inner{
        public void show(){
        }
     }
     public void fun(){
       Inner i=new Inner();
       i.show();
     }
}
class OuterTest{
  public static void main(String[] args){
     Outer o=new Outer();
     o.fun();
  }
}

              static: 访问格式: 内部类.外部类.方法

class Outer{
   public static class Inner{
      public void fun(){}
      public static void show(){}
   }
}
class OuterTest{
  public static void main(String[] args){
      Outer.Inner o=new Outer.Inner();
      o.fun();
      o.show();
      //对于show也可以直接调用
      Outer.Inner.show();
  }
}

     局部内部类:成员方法中定义的类

class A{
   public void fun(){
      final int num=10;
      class Inner{
         public void show(){}
      }
      Inner i=new Inner();
      i.show();
   }
}
class ATest{
    public static void main(String[] args){
       A a=new A();
       a.fun();
    }
}

 

     局部内部类访问局部变量,该变量必须用final修饰;

     为什么用final修饰?延长局部变量的生命周期,当局部类使用该局部变量时,方式局部变量从内从中消失。

匿名内部类:没有名字的局部内部类,前提:存在一个类,接口或抽象类

格式: new 类名或接口名()

            {

                   重写类或接口中的方法;

                   也可以定义自己的方法;

             };

interface Inner{
  public abstract void show();
}
class Outer{
   public void fun(){
      new Inner(){
         public void show(){// do what}
      }.show();
   }  
}

 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值