Java之面向对象二(static,抽象类,接口)

static

1、静态属性:类名.属性名,非静态属性必须建立一个实例调用

2、静态方法:能够调用静态方法,不能调用普通方法(必须实例),但普通方法能够调用静态方法(原理:类加载机制)

3、静态代码块:static{},静态代码块虽类创建一起执行,且只执行一次,普通代码块需要实例化时被使用

public Person(){
System.out.println("构造方法");
}
{
System.out.println("普通/匿名代码块");
}
static{
System.out.println("静态代码块");
}
public static void main(String[] args) {
//main()中空白时,会“静态代码块”
//main()中实例化Person时
Person person = new Person();
/*
输出顺序:
静态代码块
普通/匿名代码块
构造方法
*/
}

执行顺序

(1)静态代码块,匿名代码块,构造方法

(2)父类中的匿名代码块、父类的构造方法、子类的匿名代码块、子类的构造方法

4、静态导入包

import java.lang.Math.random  提示错误

import static java.lang.Math.random  编译通过

 

final

final可以修饰变量、方法、类

1、定义为final的类不能被继承,String类被定义为final,无法被继承

2、final定义的方法不能被重写

3、final修饰的变量不允许被修改(不允许重新赋值),对于引用变量也是如此,永远指向一个对象

4、final修饰实例变量

class User{
final int age; //报错
final int age = 10; //通过
//第一句报错,因为系统若赋予默认值则无法再改变,成为无效,所以系统要求final修饰的实例变量必须手动赋值
  
  final int v;
  public User(){
    this.v = 10;
  }  //通过
  //在系统赋值前赋值,所以通过编译
  //实例变量是在构造方法执行的过程中被赋值(new的过程中)
}

5、final不控制访问权限,即调用问题

 

抽象类

public abstract class Person {  //抽象类
public abstract void dosth(); //抽象方法,只有方法名,没有实现
}

抽象类的本质是约束

1、抽象类的所有方法,它的子类都必须实现,除非子类也是抽象类

2、抽象类不能new,只能靠子类实现

3、抽象类中可以有普通方法,但抽象方法必须在抽象类中

 

接口

接口只有规范,不能写方法,可以看作是更高标准的抽象类;

面向接口编程:先根据需求给出接口,然后编写方法实现

public interface InterfaceTest {
void run(); //默认是public abstract void run();
}

接口都需要有实现类

public class UserServiceImpl implements InterfaceTest{
//可自动生成
@Override
public void run() {

}
}

1、可以implements多个接口,实现多继承

2、public abstract(方法) / public static final(常量)

3、接口不是类,没有构造方法

 

内部类

一个Java类中可以有多个class类,但只能有一个public class类

方法中定义的类称为局部内部类

已知:Inner类为Outer类的内部类

实例化内部类

Outer outer = new Outer();

Outer.Inner inner = outer.new Inner();

(未完待续……)

posted @ 2021-02-26 01:56  头秃1997  阅读(72)  评论(0)    收藏  举报