面向对象(final关键字,接口)

一.final关键字

用来声明属性(成员变量),方法和类

1.1final属性赋值

  • 在声明的同时赋值,往往与static一起使用(使用后在方法区就只有一份)
  • 声明时不赋值,必须在构造方法中逐一赋值
  • 创建每个对象的时候,final属性的值是正确的

1.2final修饰

对参数做final修饰:在方法参数前面加final关键字,为了防止数据在方法体中被修改

例:

//final 修饰的类不可以被继承
public class FinalDemo {
    //final+static 修饰的在方法区是唯一的
    final static int num = 0;
    final String name;
//每次创建的name都是唯一的
    public FinalDemo(String name) {
        this.name = name;
    }
    //final修饰的方法不可以重写
    public final void first(){
        System.out.println("我就是我,不一样的烟花");
    }
    public static void main(String[] args) {
      FinalDemo finalDemo =  new FinalDemo("小黑子");
        System.out.println("我是"+finalDemo.name);
    }
}
public class Final1 extends FinalDemo{

    public Final1(String name) {
        super(name);
    }
}
public class Test {
    public static void main(String[] args) {
        FinalDemo finalDemo = new FinalDemo("鸡哥");
        System.out.println("我的名字是"+finalDemo.name);
        finalDemo.first();
        Final1 final1 = new Final1("小红");
        System.out.println("我的名字是"+final1.name);
        final1.first();
    }
}

结果:

二.接口

2.1接口的定义

接口的定义:使用 interface 关键字用来声明一个接口。

[访问修饰符] interface 接口名称 [extends 其他的接口名1,….其他的接口名n]

{

// 声明常量 抽象方法 静态方法 默认方法

}

2.2接口的使用

类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。

[访问修饰符] class 类名 implements 接口名1,接口名2……{ }

结合继承:

[访问修饰符] class 类名 extends 父类名 implements 接口名1,接口名2……{ }

2.3接口的特性

接口的特性:

• 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字

• 接口中方法可以是抽象的,静态的,默认的

• 接口中声明的属性默认为 public static final 的

• 接口不是被类继承了,而是要被类实现

• 接口不能实例化对象

• 与继承关系类似,接口与实现类之间存在多态性

• 一个接口能继承其它多个接口

• 当类实现接口的时候,类要实现接口中所有的抽象方法。否则,类必须声明为抽象的类

例:

public class Animal {
    String name;
    int age;
    public void eat(){
    }
}
public interface Run {
     void run();
}
public interface Swim {
     void swim();
     public default void test1(){
          //创建默认方法
          System.out.println("默认方法");
     }
     public static void test2(){
          System.out.println("静态方法");
     }
}
public class Cat extends Animal implements Run,Swim {
    @Override
    public void run() {
        System.out.println("小猫会跑");
    }

    @Override
    public void swim() {
        System.out.println("小猫会游泳");
    }
}
public class Cow implements Run {

    @Override
    public void run() {
        System.out.println("哞儿~,快跑");
    }
}
public class Test {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.age=18;
        System.out.println(cat.age);
        cat.name="咪咪";
        System.out.println(cat.name);
        cat.eat();
        cat.run();
        cat.swim();
        Run run = new Cat();
        run.run();
        Swim swim = new Cat();
        swim.swim();
        Swim.test2();
        //静态方法通过接口名访问
        cat.test1();
        //默认方法通过子类创建的对象访问
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_69778508/article/details/130592681
今日推荐