网站 公司实力,个人免费网站如何做,wordpress网站教程,asp手机网站开发教程1.1 抽象类引入 父类中的方法#xff0c;被它的子类们重写#xff0c;子类各自的实现都不尽相同。那么父类的方法声明和方法主体#xff0c;只有声明还有意义#xff0c;而方法主体则没有存在的意义了(因为子类对象会调用自己重写的方法)。换句话说#xff0c;父类可能知道…1.1 抽象类引入 父类中的方法被它的子类们重写子类各自的实现都不尽相同。那么父类的方法声明和方法主体只有声明还有意义而方法主体则没有存在的意义了(因为子类对象会调用自己重写的方法)。换句话说父类可能知道子类应该有哪个功能但是功能具体怎么实现父类是不清楚的由子类自己决定父类只需要提供一个没有方法体的定义即可具体实现交给子类自己去实现。我们把没有方法体的方法称为抽象方法。Java语法规定包含抽象方法的类就是抽象类。 抽象方法 没有方法体的方法。 抽象类包含抽象方法的类。 在没有学抽象方法的时候,之前我们的父类都是写一些简单的程序,但如果子类不重写父类的方法的话,就会出些弊端
1.2abstract使用格式 abstract是抽象的意思用于修饰方法方法和类修饰的方法是抽象方法修饰的类是抽象类。 使用abstract关键词,子类会强制重写,否则报错,抽象方法所在的类就是抽象类 使用abstract 关键字修饰方法该方法就成了抽象方法抽象方法只包含一个方法名而没有方法体。 抽象方法
定义格式 修饰符 abstract 返回值类型 方法名 (参数列表) 代码举例 public abstract void run() 抽象类
如果一个类包含抽象方法那么该类必须是抽象类。注意抽象类不一定有抽象方法但是有抽象方法的类必须定义成抽象类。
定义格式 abstract class 类名字 { } 代码举例 public abstract class Animal { public abstract void run() } 抽象类的使用
要求继承抽象类的子类必须重写父类所有的抽象方法。否则该子类也必须声明为抽象类。 1.抽象类不能实例化
测试类 public class Test {public static void main(String[] args) {//创建对象//1.抽象类不能实例化//Person pnew Person();}
} 子类 public abstract class Person {public abstract void work();} 2.抽象类中不一定有抽象方法,但是有抽象方法的一定有抽象类 public abstract class Person {// public abstract void work();public void show(){System.out.println(睡觉);}} 3.可以有构造方法 public abstract class Person {public Person() {}public Person(String name, int age) {this.name name;this.age age;} } 4. 抽象类写了一个抽象方法 public abstract class Person {public abstract void work();public Person() {}public Person(String name, int age) {this.name name;this.age age;}private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}} 抽象的子类重新了抽象中的所有的抽象方法 package abstractdemo01;public class Student extends Person {Overridepublic void work() {System.out.println(学生的工作就是学习);}public Student() {}public Student(String name, int age) {super(name, age);}
} 测试类 public class Test {public static void main(String[] args) {Student s new Student(zhangsan, 18);System.out.println(s.getAge() s.getName());}
} 练习 父类 animal
package abstractdemo02;public abstract class animal {private String name;private int age;public animal() {}public animal(String name, int age) {this.name name;this.age age;}/*** 获取* return name*/public String getName() {return name;}/*** 设置* param name*/public void setName(String name) {this.name name;}/*** 获取* return age*/public int getAge() {return age;}/*** 设置* param age*/public void setAge(int age) {this.age age;}public void dirk(){System.out.println(动物在喝水);}public abstract void eat();
}子类Dog
package abstractdemo02;public class Dog extends animal{Overridepublic void eat() {System.out.println(狗在吃骨头);}public Dog() {}public Dog(String name, int age) {super(name, age);}
}子类Frog
package abstractdemo02;public class Frog extends animal{Overridepublic void eat() {System.out.println(青蛙在吃虫子);}public Frog() {}public Frog(String name, int age) {super(name, age);}
}子类Sleep
package abstractdemo02;public class Slepp extends animal{Overridepublic void eat() {System.out.println(山羊吃艹);}public Slepp() {}public Slepp(String name, int age) {super(name, age);}
}测试类
package abstractdemo02;public class Test {public static void main(String[] args) {Frog f new Frog(zhangsan,18);System.out.println(f.getAge() f.getName());f.eat();System.out.println(----------);Dog d new Dog(lisi,19);System.out.println(d.getAge() d.getName());d.eat();System.out.println(----------);Slepp s new Slepp(wangwu,20);System.out.println(s.getAge() s.getName());s.eat();}
}此时的方法重写是子类对父类抽象方法的完成实现我们将这种方法重写的操作也叫做实现方法。
抽象类的特征 抽象类的特征总结起来可以说是 有得有失 有得抽象类得到了拥有抽象方法的能力。 有失抽象类失去了创建对象的能力。 其他成员构造方法实例方法静态方法等抽象类都是具备的 抽象类的细节 不需要背只要当idea报错之后知道如何修改即可。 关于抽象类的使用以下为语法上要注意的细节虽然条目较多但若理解了抽象的本质无需死记硬背。 抽象类不能创建对象如果创建编译无法通过而报错。只能创建其非抽象子类的对象。 理解假设创建了抽象类的对象调用抽象的方法而抽象方法没有具体的方法体没有意义。 抽象类中可以有构造方法是供子类创建对象时初始化父类成员使用的。 理解子类的构造方法中有默认的super()需要访问父类构造方法。 抽象类中不一定包含抽象方法但是有抽象方法的类必定是抽象类。 理解未包含抽象方法的抽象类目的就是不想让调用者创建该类对象通常用于某些特殊的类结构设计。 抽象类的子类必须重写抽象父类中所有的抽象方法否则子类也必须定义成抽象类编译无法通过而报错。 理解假设不重写所有抽象方法则类中可能包含抽象方法。那么创建对象后调用抽象的方法没有意义。 抽象类存在的意义是为了被子类继承。 理解抽象类中已经实现的是模板中确定的成员抽象类不确定如何实现的定义成抽象方法交给具体的子类去实现。 抽象类存在的意义 抽象类存在的意义是为了被子类继承否则抽象类将毫无意义。抽象类可以强制让子类一定要按照规定的格式进行重写。