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();
(未完待续……)

浙公网安备 33010602011771号