175 抽象类
抽象方法,只是声明方法,没有方法体(连花括号也不写),到了子类里再写方法体
抽象类,里面可写抽象/非抽象方法
抽象方法,的类必须是抽象类
> 抽象方法很有要求
project/myAbstract,package/itheima01
176 抽象类的特点
特点01 用abstract修饰抽象类、抽象方法
特点02 抽象类随意,抽象方法只能写在抽象类里
特点03 抽象类的实例化要通过子类对象实现,这叫抽象类多态
特点04 抽象类的子类,必须重写抽象方法or子类也是抽象类
抽象类如何创建对象?——要通过子类多态去创建,也就是必须先1.写继承抽象类的子类,然后2.创建子类的对象才行
抽象类的子类,必须重写抽象方法or子类也是抽象类,否则报错
project/myAbstract,package/itheima02
--------------------------------------------------------------
package itheima02E176;
//
public abstract class Animal {
//
public abstract void eat();
public void sleep(){
System.out.println("176/睡觉");
}
}
--------------------------------------------------------------
package itheima02E176;
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("176/猫吃鱼");
}
}
--------------------------------------------------------------
package itheima02E176;
public abstract class Dog extends Animal{
}
--------------------------------------------------------------
package itheima02E176;
public class AnimalDemo {
public static void main(String[] args) {
//Animal a = new Animal();
Animal a = new Cat();
a.eat();
a.sleep();
}
}
177 抽象类的成员特点
成员变量,可变量可常量
成员方法,可抽象可非抽象,可构造方法但不可实例化(用于子类访问父类的初始化)
--------------------------------------------------------------
package itheima03E177;
public abstract class Animal {
private int age=20;
private final String city="177/北京";
//抽象类里可以写构造方法
public Animal(){}
public Animal(int age) {
this.age = age;
}
public void show(){
System.out.println(age);
age=40;
System.out.println(city);
// city="上海";
}
public abstract void eat();
}
--------------------------------------------------------------
package itheima03E177;
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("177/猫吃鱼");
}
}
--------------------------------------------------------------
package itheima03E177;
public class AnimalDemo {
public static void main(String[] args) {
Animal a = new Cat();
a.eat();
a.show();
}
}