1.接口
首先接口是不能被实例化的,它接口是一种引用的数据类型,接口只是描述应该具备的方法。
所以接口的属性: 固定写法:public static final 数据类型 属性名 = 值;
所以接口的方法: 固定写法:public abstract 返回值类型 方法名(参数列表);
demo:
public interface Demo{
public static final String id="deede";
public abstract String getMessage();
}
2.父类
首先我们先了解类的加载顺序:
2.1 类的执行步骤:
1、类加载阶段
2、准备阶段:类变量(静态变量)分配内存,放在方法区(静态区),此时只是分配内存,并没有初始化(一切皆为null或0)
3、开始初始化:类变量初始化
一、首先初始化父类的静态成员变量和静态代码块;(静态成员变量和静态代码块都是存在方法区,生命周期跟随类)
二、然后到子类中的静态成员变量和静态代码块;
三、然后初始化父类的普通成员变量和普通代码块;(成员变量是跟随着类的实例存放在堆当中,生命周期跟随对象)
四、最后初始化子类的普通成员变量和代码块;
加载子类前会先加载父类。
2.2 父类属性和方法
子类会继承父类中非私有的属性和方法。继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。
demo:
父类
public class Father {
public final static String testName = "dede";
public String testAddress ;
public void getAddress(String address){
System.out.println("打印出来"+address);
System.out.println("打印出来"+testAddress);
}
}
子类:
public class Child extends Father {
public String testAddress ;
public void printName(){
System.out.println(Child.testName);
}
public static void main(String[] args){
Child child = new Child();
//子类的属性赋值而父类属性为赋值的情况下
child.testAddress="子类的地址";
child.getAddress("传入的地址");
//父类常量打印
child.printName();
}
}