抽象类
package com.jian.demo10;
public abstract class Pet { //抽象的宠物父类
}
package com.jian.demo10;
public class Dog extends Pet {
}
package com.jian.demo10;
public class Test {
public static void main(String[] args) {
/*
注意:1.创建宠物对象时,这个对象得到的不是猫、狗、鸟......也就是说,当创建宠物对象时,并没有明确得到的是具体哪个宠物
2.原因:宠物类是父类,也就是说一般创建子类对象,因此就可以将父类编写为抽象类
3.抽象类特点:
3.1抽象类使用abstract关键字
3.2抽象类不能创建对象,也就是说抽象类也是多态的一种形式
*/
// Pet p = new Pet();
Pet p = new Dog(); //构成多态,也就是向上转型或者自动类型转换
}
}
练习:使用面向对象完成,实现宠物吃东西 分析得到: 宠物类 方法:吃 猫类 继承 宠物父类 重写父类吃的方法 狗类 继承 宠物父类 重写父类吃的方法 鸟类 继承 宠物父类 重写父类吃的方法 鱼类 继承 宠物父类 重写父类吃的方法 ........ 继承 宠物父类 重写父类吃的方法
package com.jian.demo11;
/**
* 宠物类
* 方法:吃
*
*/
public abstract class Pet {
public abstract void eat();
}
package com.jian.demo11;
public class Dog extends Pet {
@Override
public void eat() {
System.out.println("小狗正在吃狗粮.....");
}
}
package com.jian.demo11;
/**
* 猫类 继承 宠物父类
* 重写父类吃的方法
*
*/
public class Cat extends Pet {
@Override
public void eat() {
System.out.println("小猫正在吃鱼......");
}
}
package com.jian.demo11;
public class Bird extends Pet {
@Override
public void eat() {
System.out.println("小鸟正在吃虫子......");
}
}
package com.jian.demo11;
public class Test {
public static void main(String[] args) {
/*
注意:1.不同的宠物吃的东西不一样,因此需要在子类中重写父类吃的方法
2.当创建子类对象时,再调用吃的方法,则优先调用子类重写以后的方法,也就是说父类吃的方法没有使用到,但是不能删除,原因:1.更改题意,2.父类中没有吃的方法子类也不能重写
则就可以将父类的方法编写为抽象方法
3.抽象方法特点
3.1抽象方法使用abstract关键字
3.2抽象方法必须没有方法体,也就是大括号不需要编写,直接以英文分号作为结尾
3.3抽象方法必须编写在抽象类中
3.4当子类继承抽象类时,则必须在子类中重写抽象类中所有的抽象方法,否则子类也是抽象类
大多数情况下子类重写抽象类中的抽象方法
3.5抽象类不能创建对象,其实抽象类也是多态的一种形式
*/
Pet p = new Dog(); //构成多态,也就是向上转型或者自动类型转换
p.eat(); //优先调用子类重写以后的方法
p = new Cat(); //构成多态,也就是向上转型或者自动类型转换
p.eat(); //优先调用子类重写以后的方法
p = new Bird(); //构成多态,也就是向上转型或者自动类型转换
p.eat(); //优先调用子类重写以后的方法
}
}