抽象类:对现实世界一种类型的多种实体的统一抽象定义。
具体类:一种实体的抽象描述。
具体类再抽象就是抽象类。
抽象类:某些方法的实现因为子类的不同而不同,故可以在父类中声明抽象方法,交由子类具体实现这些方法。
抽象类:
1.使用abstract修饰
2.子类必须重写全部抽象方法(实现),若是部分没有实现就还是抽象类。
3.抽象方法必须在抽象类中
4.抽象方法只有方法的声明,没有方法的实现,最后以;结束
5.抽象类不能被实例化
6.不能用abstract修饰属性,私有方法,构造器,静态方法,final方法
抽象类比普通类多一个抽象方法(普通类具有的其他东西它都有)
抽象类代码练习:
public abstract class Pet {
private String name;
private int age;
private double weight;
public Pet() {}
public Pet(String name, int age, double weight) {
this.name = name;
this.age = age;
this.weight = weight;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setWeight(double weight) {
this.weight = weight;
}
public double getWeight() {
return weight;
}
@Override
public String toString() {
return "昵称:" + name + ",年龄:" + age + ",体重:" + weight;
}
//抽象方法
public abstract void speak();
public abstract void eat();
}
public class Bird extends Pet {
private int flySpeed;
public Bird() {}
public Bird(String name, int age, double weight, int flySpeed) {
super(name, age, weight);
this.flySpeed = flySpeed;
}
public void setFlySpeed(int flySpeed) {
this.flySpeed = flySpeed;
}
public int getFlySpeed() {
return flySpeed;
}
@Override
public String toString() {
return super.toString() + ",飞行速度:" + flySpeed;
}
//实现抽象方法
@Override
public void speak() {
System.out.println("吱吱吱......");
}
@Override
public void eat() {
System.out.println("吃虫子......");
}
}
public class Dog extends Pet {
private String type;
public Dog() {}
public Dog(String name, int age, double weight, String type) {
super(name, age, weight);
this.type = type;
}
public void setType(String type) {
this.type = type;
}
public String getType() {
return type;
}
@Override
public String toString() {
return super.toString() + ",品种:" + type;
}
@Override
public void speak() {
System.out.println("汪汪汪...");
}
@Override
public void eat() {
System.out.println("吃骨头...");
}
}
public class Cat extends Pet {
private String color;
public Cat() {}
public Cat(String name, int age, double weight, String color) {
super(name, age, weight);
this.color = color;
}
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
@Override
public String toString() {
return super.toString() + ",颜色:" + color;
}
@Override
public void speak() {
System.out.println("喵喵喵...");
}
@Override
public void eat() {
System.out.println("吃鱼...");
}
}
public class PetTest {
public static void main(String[] args) {
Pet[] p = new Pet[6];
//String name, int age, double weight, String color
//String type
//int flySpeed
p[0] = new Cat("小花", 2, 3.5, "花色");
p[1] = new Cat("小黑", 1, 2.7, "黑色");
p[2] = new Dog("大黑", 3, 20, "哈士奇");
p[3] = new Dog("大黄", 5, 40, "家狗");
p[4] = new Bird("咕咕", 1, 1, 20);
p[5] = new Bird("唧唧", 1, 0.5, 30);
for(int i = 0; i < p.length - 1; i++) {
for(int j = 0; j < p.length - 1 - i; j++) {
if (p[j].getWeight() < p[j + 1].getWeight()) {
Pet temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
}
}
for(Pet pv : p) {
System.out.println(pv);
}
}
}
加油!