JAVA——面向对象——抽象类和抽象方法abstract
一、抽象类和抽象方法的概念
1.产生背景: 继承原本设计出来的用法是,子类继承父类的属性和方法。 但由于现在项目都是多人合作,继承更多用于规范代码,使代码统一。 (抽象)父类相当于一个模板的作用,不再定义属性,而是用来定义(抽象)方法名。 抽象方法只能定义在抽象类里。 2.抽象类和抽象方法的特点: 1、抽象类不能被创建对象,只能作为父类被子类继承 2、抽象方法没有方法体,只能被子类重写 3、一般父类定义成抽象类,不定义属性,方法中也没有方法体 4、子类的属性在子类中定义,抽象类的子类强制继承父类的抽象方法 3.语法(都用abstract修饰) 抽象类:
public abstract class 类名 {
}
抽象方法
public abstract void 方法名();
二、抽象类和抽象方法的举例
抽象类-父类:Animal01 抽象类中定义了抽象方法:eat()
/**
* 新建一个动物类(抽象类)
* @author z
*
*/
public abstract class Animal01 {
//定义抽象方法eat(),给Animal创建子类时,子类就必须继承并重写这个方法
//作用是在多人合作的情况下,达到了方法名的强制统一效果
public abstract void eat();
//定义抽象方法run(),给Animal创建子类时,子类就必须继承并重写这个方法
public abstract void run();
}
具体类-子类Dog01
/**
* 新建一个狗狗类继承父类(动物类)
* 父类是抽象类,子类就会强制重写父类的抽象方法
* @author z
*
*/
public class Dog01 extends Animal01{
//子类的属性在子类中定义,不再从父类中继承
private String name;
private String color;
private int age;
//子类的构造方法
public Dog01(String name,String color,int age) {
this.name = name;
this.color = color;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
//子类强制重写父类的抽象方法
public void eat() {
System.out.println("狗吃骨头");
}
//子类强制重写父类的抽象方法
public void run() {
System.out.println("狗伸着舌头跑步");
}
//子类自有的方法
public void lookHome() {
System.out.println("看家。");
}
}
具体类-子类:Cat01
/**
* 新建一个猫猫类继承父类(动物类)
* 父类是抽象类,子类就会强制重写父类的抽象方法
* @author z
*
*/
public class Cat01 extends Animal01{
private String name;
private String color;
private int age;
private String sex;
public Cat01(String name,String color,int age,String sex){
this.name = name;
this.color = color;
this.age = age;
this.sex = sex;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getSex() {
return sex;
}
//强制重写父类的抽象方法
public void eat() {
System.out.println("猫吃鱼。");
}
//强制重写父类的抽象方法
public void run() {
System.out.println("猫走猫步。");
}
//子类自有的方法
public void catchMouse() {
System.out.println("抓老鼠。");
}
}
测试这两个子类创建对象和调用方法
package com.yebuxiu.lesson01ChouXiangLei;
/**
* 新建一个主类
* 用来根据刚刚定义的狗狗类、猫猫类来创建对象,调用方法
* @author z
*
*/
public class Lesson01 {
public static void main(String[] args) {
//new一个狗狗对象
Dog01 d1 = new Dog01("狗子一号","黑色",3);
//new一个猫猫对象
Cat01 c1 = new Cat01("猫猫一号","白色",3,"母");
//调用方法
d1.eat();
d1.run();
d1.lookHome();
c1.eat();
c1.run();
c1.catchMouse();
}
}
|