抽象方法:
1.使用abstract修饰的方法
2.抽象方法没有方法体,只能声明(在子类中重写方法)
3.抽象方法只能存在于抽象类中或者接口中
抽象类:
1.使用abstract修饰的类
2.抽象类也可以声明普通方法,构造方法
3.抽象类的子类必须重写抽象父类中所有抽象方法
4.抽象类不能被实例化,不能创建对象
People抽象类
//People抽象类
abstract public class People {
//构造方法
public People(){
}
//不能通过该方法具体描述出人到底吃啥,该方法是抽象的
abstract public void eat();
abstract public void speak();
//具体方法
public void sleep(){
System.out.println("tangzheshui");
}
}
Chinese继承抽象类
//Chinese继承抽象类
public class Chinese extends People {
@Override
public void eat() {
System.out.println("吃大米");
}
@Override
public void speak() {
System.out.println("说中文");
}
public static void main(String[] args) {
//创建对象
Chinese c=new Chinese();
//多态
People p=new Chinese();
//new People();抽象类不能创对象
}
}
权限修饰符的大小:
public>protected>default>private
子类重写父类的方法后,方法权限不能比父类方法小,可以大,不能小
使用private修饰的方法不能被子类重写
final关键字:
1,用于修饰变量,表示该变量一旦初始化值,值不能改变。变量因此变成了常量
2.使用final修饰的类不能被继承
3.使用final修饰的方法不能被子类重写 子类可以继承父类的所有的方法和属性,但是不能访问私有的方法和属性
父类
public class Father {
public int age;
String name;
protected char sex;
private double salary;
protected void eat(){
System.out.println("吃");
}
}
子类
public class Son extends Father {
//重写eat方法
@Override
//public,protected都可以,因为父类此方法是protected,不能比父类的权限范围小
public void eat() {
System.out.println("干大碗饭");
}
public static void main(String[] args) {
final int i=10;
//i=20;编译错误 已经变成常量,不能改变
//new Test();
Son son = new Son();
son.eat();//干大碗饭
}
}
代码块:
1.静态代码块:
随着类加载而执行
格式:
static{
代码;
}
2.构造代码块(普通代码块):
创建对象时执行,并且优先于构造方法执行
格式:
{
}
public class Test {
//静态代码块(随着类加载而执行)
static {
System.out.println("这是一个静态代码块");
}
//构造代码块(创对象才能执行)
{
System.out.println("这是一个构造代码块");
}
//构造方法(创对象才能执行)
public Test() {
System.out.println("构造方法");
}
public static void main(String[] args) {
new Test();
//这是一个静态代码块
//这是一个构造代码块
//构造方法
}
}
若父类与子类一同调用,程序执行顺序为:
加载父类-->加载父类静态资源 --> 加载子类-->加载子类进静态资源 -->调用父类构造方法-->调用子类构造方法