个人主页VON
所属专栏java从入门到起飞
目录
个人主页编辑我的主页编辑
一、简介
抽象方法:
抽象类:
概述:
二、抽象类
特点和用途
示例:
Animal类
Dog类
Flog类
Sheep类
Text类
结果展示:
三、抽象方法
特点和用途
示例:
注意事项
一、简介
抽象方法:
抽象方法是没有方法体的方法,只有方法声明(方法名、参数列表、返回类型)。使用 abstract
关键字声明。
抽象类:
抽象类是用 abstract
关键字声明的类,不能直接实例化对象,主要用于被继承。
概述:
抽象方法和抽象类是面向对象编程中用于实现抽象和多态性的重要概念。抽象方法用于定义接口规范,由子类实现具体行为;抽象类则为子类提供了部分实现,并约束子类必须实现的方法。通过抽象方法和抽象类,Java可以更灵活地组织和设计代码结构,提高代码的可维护性和扩展性。
二、抽象类
抽象类(Abstract Class)是Java中一种特殊的类,它不能被实例化,即不能直接创建对象。其主要目的是为了被继承,子类可以通过扩展抽象类来实现其定义的抽象方法和非抽象方法。
特点和用途
-
不能被实例化:抽象类不能直接创建对象,只能被用作其他类的父类。
-
包含抽象方法:抽象类中可以包含抽象方法(没有方法体的方法),这些方法必须在子类中被实现(即重写)才能使用。
-
可以有普通方法:抽象类不仅可以包含抽象方法,还可以包含具体实现的普通方法。子类继承抽象类时,可以选择性地覆盖这些方法。
-
用于类的继承:通过继承抽象类,子类可以获得父类的结构和行为,同时根据需要实现父类定义的抽象方法,从而实现多态性和代码复用。
示例:
注:使用抽象类时要使用抽象方法
Animal类
package com.von.day14;
public abstract class Animal {
private String name;
private int age;
public Animal() {
}
public Animal(String name, int age) {
this.name = name;
this.age = 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;
}
public void drink(){
System.out.println("动物在喝水");
}
public abstract void eat();
}
Dog类
package com.von.day14;
public class Dog extends Animal{
public Dog() {
}
public Dog(String name, int age) {
super(name, age);
}
@Override
public void eat(){
System.out.println("狗吃骨头");
}
}
Flog类
package com.von.day14;
public class Frog extends Animal{
public Frog() {
}
public Frog(String name, int age) {
super(name, age);
}
@Override
public void eat(){
System.out.println("青蛙吃虫");
}
}
Sheep类
package com.von.day14;
public class Sheep extends Animal{
public Sheep() {
}
public Sheep(String name, int age) {
super(name, age);
}
@Override
public void eat(){
System.out.println("山羊吃草");
}
}
Text类
package com.von.day14;
public class text {
public static void main(String[] args) {
Frog f=new Frog("张三",18);
System.out.println(f.getName()+","+f.getAge());
f.drink();
f.eat();
Dog d=new Dog("李四",19);
System.out.println(d.getName()+","+d.getAge());
d.drink();
d.eat();
Sheep s=new Sheep("王五",20);
System.out.println(s.getName()+","+s.getAge());
s.drink();
s.eat();
}
}
结果展示:
三、抽象方法
抽象方法(Abstract Method)是Java中定义在抽象类或者接口中的方法,它没有方法体,只有方法签名(包括方法名、参数列表和返回类型)。抽象方法必须在子类中被重写(实现),否则这些子类也必须声明为抽象类。
特点和用途
-
没有方法体:抽象方法没有方法体,即不包含方法的具体实现。
-
必须在抽象类或接口中:抽象方法只能存在于抽象类或接口中。抽象类可以包含抽象方法和具体方法,而接口中的方法默认都是抽象方法。
-
强制子类实现:子类继承抽象类或实现接口时,必须实现其中的抽象方法,否则子类也必须声明为抽象类。
-
多态性:抽象方法的存在使得多态性得以实现。通过父类或接口的引用指向子类对象,可以调用子类实现的抽象方法,实现不同对象的不同行为。
示例:
// 抽象类
abstract class Animal {
// 抽象方法,没有方法体
abstract void makeSound();
// 普通方法,有方法体
void eat() {
System.out.println("Animal is eating");
}
}
// 子类继承抽象类并实现抽象方法
class Dog extends Animal {
// 实现抽象方法
void makeSound() {
System.out.println("Dog barks");
}
}
// 另一个子类也可以继承抽象类并实现抽象方法
class Cat extends Animal {
// 实现抽象方法
void makeSound() {
System.out.println("Cat meows");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog(); // 使用多态性,编译时类型为Animal,运行时类型为Dog
dog.makeSound(); // 调用子类实现的抽象方法
dog.eat(); // 调用继承的普通方法
Animal cat = new Cat(); // 同样可以使用多态性
cat.makeSound();
cat.eat();
}
}
注意事项
- 抽象方法不能被声明为私有(private),因为私有方法不能被子类重写。
- 如果一个类包含抽象方法,那么该类必须声明为抽象类(使用
abstract
关键字)。但是,抽象类中可以包含普通方法。 - 抽象方法在子类中必须被实现,除非子类也是抽象类。