写点什么

Java 面向对象 8——抽象类和抽象方法(知识点 + 使用方法)

作者:Java-fenn
  • 2022 年 9 月 13 日
    湖南
  • 本文字数:1850 字

    阅读完需:约 6 分钟

面向对象编程 Java 抽象类和抽象方法一、前言本文会梳理有关抽象类和抽象方法的知识点,这会运用在接口中,而接口是在实际开发中非常重要的,所以知识点非常重要


二、抽象方法抽象方法就是以 abstract 修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现


2.简单记忆方法概念听起来很复杂难懂,那我们举例说明


比如有三个人 A、B、C 的职业都是程序员,到了返点都要吃饭,但是每个人吃的东西不一样,有人吃爱心便当,有人吃盒饭,有人吃快餐,那么他们都有共同的方法:吃,并且他们都可以同属于一个父类:程序员,那么我们可以 把共同的方法吃抽取到父类(程序员)中 , 由于子类(ABC 三个人) 吃的东西不相同,即 方法体不同 ,所以 要把该方法定义为抽象方法


3.代码格式修饰符 abstract 返回值类型 方法名 (参数列表);例如


public abstract void eat();]4.使用说明如果要继承父类中的抽象方法,则必须重写该方法,否则就让子类也变为抽象类


示例:


如果想要偷懒的话,点击 Alt+Enter 来查看解决方法


我们在这里选择第二个,实现方法


一个是父类中的抽象方法,另一个一个是接口(这个下一篇文章中会讲到)我们只需要全选然后点击回车就会自动帮我们生成重写的方法了


此时我们只要改写方法体即可


三、抽象类当某一个类中存在抽象方法,那么这个类就要被定义为抽象类


2.代码格式 abstract class 类名 {


}例如:


abstract class Student {


}3.使用说明继承抽象类的子类 必须重写父类所有的抽象方法 。否则,该子类也必须声明为抽象类


4.注意点抽象类不能实例化


抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。


当我们在一个非抽象的类中写抽象方法时,会报错


但是在抽象类中写非抽象方法,又不会报错


抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类,编译无法通过而报错。


四、小练习属性 行为青蛙 Frog 名字、年龄(1) 吃虫子、喝水狗 Dog 名字、年龄(2) 吃骨头、喝水兔子 名字、年龄(3) 吃胡萝卜、喝水 eat 是抽象方法,吃的东西不同,而 drink 都是喝水,所以不用使得该方法变为抽象方法


3.代码实现:one:父类 public abstract class Animal {


private String name;private int age;
public Animal(String name, int age) {
this.name = name; this.age = age;}
public Animal() {
}
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 abstract void eat();
public void drink(){
System.out.println("喝水");}
复制代码


}:two:Frog 类 public class Frog extends Animal implements Swim {


public Frog(String name, int age) {

super(name, age);}
@Overridepublic void eat() {
System.out.println("吃虫子");}
@Overridepublic void drink() {
System.out.println("小青蛙喝水");}
复制代码


}:three:Dog 类 public class Dog extends Animal implements Swim {


public Dog(String name, int age) {

super(name, age);}
@Overridepublic void eat() {
System.out.println("吃骨头");}
@Overridepublic void drink() {
System.out.println("小狗喝水");}
复制代码


}:four:Rabbit 类 public class Rabbit extends Animal{


public Rabbit(String name, int age) {
super(name, age);}

@Overridepublic void eat() {
System.out.println("吃胡萝卜");}
@Overridepublic void drink() {
System.out.println("小狗喝水");}
复制代码


}:five:测试类 public class Test {


public static void main(String[] args) {

Frog f = new Frog("小青蛙",1); System.out.println(f.getName() + "今年" + f.getAge() + "岁\n它的行为有:"); f.eat(); f.drink(); System.out.println("---------------");
Dog g = new Dog("小狗",2); System.out.println(g.getName() + "今年" + g.getAge() + "岁\n它的行为有:"); g.eat(); g.drink(); System.out.println("---------------");
Rabbit r = new Rabbit("小白兔",3); System.out.println(r.getName() + "今年" + r.getAge() + "岁\n它的行为有:"); r.eat(); r.drink();}
复制代码


}

用户头像

Java-fenn

关注

需要Java资料或者咨询可加我v : Jimbye 2022.08.16 加入

还未添加个人简介

评论

发布
暂无评论
Java面向对象8——抽象类和抽象方法(知识点+使用方法)_Java_Java-fenn_InfoQ写作社区