abstract关键字 抽象的
可以用来修饰的结构:类、方法
abstract修饰类:抽象类
此类不能new实例化
抽象类中一定有构造器,便于子类实例化时调用。开发中,都会提供抽象类的子类,让子类对象实例化
abstract修饰方法:抽象方法
只有方法的声明,没有方法体
包含抽象方法的类,一定是一个抽象类。但是抽象类中可以没有抽象方法的,子类调用。
仅当子类重写了父类中的所有的抽象方法后,此子类才可实例化
若子类没有重写父类中的 所有 的抽象方法,则此子类也是一个抽象类,需要使用abstract修饰
点击查看abstract代码
public class AbstractTest {
public static void main(String[] args) {
//一旦Person类抽象了,就不可实例化
// Person p1 = new Person();
// p1.eat();
Person p1 = new Student();
p1.eat();
p1.walk();//子类调用
p1.breath();
}
}
abstract class Creature{
public abstract void breath();
}
abstract class Person extends Creature{
String name;
int age;
//抽象类中一定有构造器,只能让子类实例化时调用,自己不可以
public Person(){
}
public Person(String name,int age){
this.name = name;
this.age = age;
}
//抽象方法
public void breath() {
System.out.println("Person重写breath huxi空气");
}
public abstract void eat();
public void walk(){
System.out.println("非抽象方法 Person 走路");
}
}
class Student extends Person{
public Student(){
}
public Student(String name,int age){
super(name,age);
}
public void eat(){
System.out.println("s重写eat 学生多吃有营养的食物学生+心无旁骛地写代码");
}
@Override
public void breath() {
System.out.println("s重写breath 学生应呼吸新鲜的没雾霾的空气");
}
public void walk(){
System.out.println("非抽象方法STUDENT走路");
}
}
抽象类的匿名子类Person
本身不可以new
,继承后重写没具体类名,匿名后要大{}
重写具体方法
public class PersonTest {
public static void main(String[] args) {
/* method( new Student() ); //匿名对象
Worker worker = new Worker();
method1( worker );//非匿名的类 非匿名的对象
method1( new Worker() );//非匿名的类 匿名的对象
*/
System.out.println("********************");
//创建了一 匿名子类 的对象:p 重写了方法
Person p = new Person(){
//Person本身不可以new,继承后重写没具体类名,匿名后要大{}重写具体方法
//Android开发里的setOnclickListener()里的参数
@Override
public void eat() {
System.out.println("吃东西");
}
@Override
public void breath() {
System.out.println("好好呼吸");
}
};
method1(p);
System.out.println("********************");
//创建 匿名子类 的匿名对象
method1(
new Person() {
@Override
public void eat() {
System.out.println("吃好吃东西");
}
@Override
public void breath() {
System.out.println("好好呼吸新鲜空气");
}
}
);
}
public static void method1(Person p){
p.eat();
p.breath();
}
public static void method(Student s){
}
}
class Worker extends Person{
@Override
public void eat() {
}
@Override
public void breath() {
}
}