zoukankan      html  css  js  c++  java
  • java学习中,抽象类的使用(java 学习中的小记录)

    java学习中,抽象类的使用(java 学习中的小记录)作者:王可利(Star·星星)

    抽象类(abstract 修饰):

    一个类如果被abstract修饰,那么这个类就叫抽象类。

    子类继承父类,但是父类里面的方法,子类可以重写,但是重写的话,父类的方法跟子类的方法又不搭配,就产生了矛盾。

    如:一个动物类:有一个用腿跑的方法。有一个鱼的类继承动物类,但是鱼不会用腿跑,所以不用重写父类的方法,就产生了矛盾。

    所以需要一个方法强制子类重写父类中的某一个方法,就用到了abstract关键词修饰。

    abstract 关键字的使用注意事项:

    1.如果 abstract 修饰方法,那么这个方法就叫抽象方法。

    2.抽象方法是没有主题的,是没有方法的具体实现(没有大括号)。如:abstract public void run();

    3.如果一个方法没有主体(主体也叫方法体,也叫函数块、函数体 )(没有大括号),必须要用 abstract 来修饰。

    4.如果一个类中有抽象方法,那么这个类就必须使用 abstract 来修饰。

    5.一个非抽象类如果继承了一个抽象类,必须实现抽象类父类中的所有方法,重写里面的方法。

    6.一个抽象类中是可以有非抽象的方法的,也可以存在构造方法的。构造方法的作用可以让子类能够初始化父类中的变量。

    7.抽象类是不能创建对象的。原因:抽象类如果创建了对象的话,对象调用抽象方法的话是没有意义的,抽象方法是没有主体的。

    8.抽象类中是可以不出现抽象方法的。

    9.abstract 不能和那些关键字连用:

       1.private(私有的是不能重写的,但是抽象类是必须要重写的就矛盾了)

       2.static(静态修饰 可以直接类访问了,抽象类是针对对象的,所以不能)

       3.final (定义了就不能改了,抽象类是必须重写的,又不能改的话就矛盾了)

    abstract 关键字的使用场景:

    我们在描一个事物的时候吗,发现这个事物确实存在某种行为,但是这种行为又不具体,那么这个时候就可以抽取这种行为声明一个没有实现的行为方式。那么这种行为我们就叫做为抽象行为。就需要用到抽象类了。

     1 package study;
     2 
     3 abstract class Animal{
     4     String name;
     5     String color;
     6     
     7     abstract public void run() ;
     8 }
     9 class Dog extends Animal{
    10     public void run(){
    11         System.out.println(name+"跑得很快");
    12     }
    13 }
    14 class Fish extends Animal{
    15     //需要重写方法(没有强制重写,因为鱼不能跑,没退腿)
    16     //应该需要重写,但是可以不重写,这样容易出问题
    17     //想一个方法强制子类重写父类中的某一个方法
    18     public void run(){
    19         System.out.println(name+"游得很快");
    20     }
    21 }
    22 
    23 public class star {
    24     public static void main(String[] args) {
    25         Dog d = new Dog();
    26         d.name = "猎狗";
    27         Fish fish =  new Fish();
    28         fish.name = "星星鱼";        
    29         
    30         d.run();//猎狗跑得很快
    31         fish.run();//星星鱼游得很快
    32     }
    33 }
  • 相关阅读:
    CentOS7安装mysql
    strusts2的开发包
    CentOS7配置mavne国内镜像
    卸载linux自带的jdk
    Centos7安装nodejs
    redis启动方式
    bash学习笔记——Shell变量
    bash学习笔记——bash是什么
    教育管理系统——android家长客户端
    php入门学习——php与jsp对比
  • 原文地址:https://www.cnblogs.com/StarKL/p/6133153.html
Copyright © 2011-2022 走看看