面向对象-补充说明(static,抽象类,接口,内部类)

2022-10-25 17:54:50 浏览数 (2)

面向对象-补充说明(static,抽象类,接口,内部类)

在上面我们已经接触到了面向对象的类和对象

接下来我们讲解一下static,抽象类,接口,内部类:

static

我们先从基本的static讲起:

  • static:属于类,可直接调用或采用 类.方法()调用
  • 非static:属于对象,只能采用 对象.方法()调用

在static扩展中我们将讲到匿名代码块和静态代码块

这两者可写于类中:

代码语言:javascript复制
public class application {

    //匿名代码块
    {
        System.out.println("匿名代码块");
    }

    //静态代码块
    static {
        System.out.println("静态代码块");
    }

    //构造方法
    public application(){
        System.out.println("构造方法");
    }

    //main函数
    public static void main(String[] args) {
        application app = new application();
    }
}

结果:

代码语言:javascript复制
静态代码块
匿名代码块
构造方法

我们可以看到在类的产生过程中,各部分的生成先后顺序是:静态代码块,匿名代码块,构造方法。

抽象类

概念:

  • 抽象类中可以包含未被定义的抽象方法,有利于后者重构

抽象定义:

代码语言:javascript复制
public abstract class 抽象类名{
    ...
    //抽象类中可包含未被定义的抽象方法
    public abstract void 抽象方法名();
    ...
    //抽象类中也可包含定义的方法
    public void 抽象方法名();
    ...
}

代码展示:

代码语言:javascript复制
//abstract象征抽象,这里指抽象类,抽象类可以含有抽象方法和具体方法
public abstract class A {

    //abstract象征抽象,这里指抽象方法,抽象方法不需要写方法体。(有抽象方法就要保证是抽象类)
    public abstract void run();

    public void say(){
        System.out.println("hello");
    }

}
代码语言:javascript复制
//这里B继承A,保证B里面有A的抽象方法的全部重构
public class B extends A{

    public void run(){
        System.out.println("run");
    }
}
代码语言:javascript复制
//这里C继承A,把C也定义为抽象类可以保证C称为A的子类
public abstract class C extends A{


}

抽象类总结:

  • 抽象类可以没有抽象方法;但抽象方法一定属于抽象类
  • 抽象类不能使用new来创建对象,只能由子类继承
  • 抽象方法只有方法的声明,没有方法的方法体,由子类书写
  • 子类继承抽象类,要么实现抽象类的所有抽象方法,要么子类本身也是抽象类
  • 子类只能继承一个抽象类;但子类可以继承多个接口

接口

普通类,抽象类,接口的区别:

  • 普通类:只有具体实现
  • 抽象类:具体实现抽象方法都有
  • 接口:只有抽象方法

接口定义:

代码语言:javascript复制
//interface标识接口
public interface UserSerivce{

    //在接口类中定义一些方法,不需要写方法体
    //方法默认为public,abstract
    void run();

    //接口方法可设置参数
    String setName(String name);

}

接口继承方法:

代码语言:javascript复制
//接口继承采用implements,可继承多个接口,需要补充继承接口的所有方法
public class UserServiceImpl implements UserSerivce,TimeSerivce{

    public void run(){

    }

    public String setName(String name){
        return "ccc";
    }

    public void jump(){

    }
}

接口作用:

  • 约束作用
  • 定义方法,分组实现

接口注意点:

  • 所有接口都是public abstract
  • 所有属性都是public static final
  • 接口不能被实例化,接口中没有构造方法
  • implement 可以实现多个接口
  • 必须重写接口的方法

内部类(拓展)

内部类定义:

  • 在一个类的内部再定义一个类

内部类在后面我们会再提起,所有这里先讲述一种类型:成员内部类

概念:

  • 定义在一个类里面的另一个类
代码语言:javascript复制
//成员内部类
public class A {

    private int id;
    public void out(){
        System.out.println("成员外部类");
    }

    public class Inner{

        public void in(){
            System.out.println("成员内部类");
        }

        public void getID(){
            System.out.println(id);
        }

    }
}

成员内部类可以直接使用外部类的private属性

代码语言:javascript复制
public class application {
    public static void main(String[] args) {

        //定义外部类
        A a = new A();
        a.out();

        //用外部类来实化内部类
        A.Inner aa = a.new Inner();
        aa.in();
        aa.getID();
    }
}

结束语

好的,这节的重点主要在抽象类和接口,好好掌握

0 人点赞