• java_抽象类


    抽象类
    1,语法定义
    抽象类前使用abstract关键字修饰,则该类为抽象类
    2.应用场景
    (1)在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。

    (2)从多个具有相同特征的类抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性

    3.作用

    限制规定子类必须实现某些方法,但不关注实现细节

    (主要目的:不关注子类的实现。但是要约束子类必须要有哪些子类)

    4.适用方法(使用规则)

    (1)abstract定义抽象类

    (2)abstract定义抽象方法,只声明,不需要实现

    (3)包含抽象方法的类都是抽象类

    (4)抽象类中可以包含普通的方法,也可以没有抽象方法

    (5)抽象类不能直接创建,可以定义引用变量

    **抽象类没没有方法体,但是以分号结束

    ***小技巧

    "syso+alt+/"System.out.println("");快捷键

    在创建子类时,勾选Browse选择父类名称

    在创建子类时,勾选abstract直接生成抽象类

    创建测试类(Initail类main方法)时,勾选public static void main(String[] args)直接生成:

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    }

    public abstract class Telphone {
        public abstract void call();
        public abstract void message();
    }
    public class CellPhone extends Telphone {
        @Override
        public void call() {
            System.out.println("通过键盘打电话");
        }
        @Override
        public void message() {
            // TODO Auto-generated method stub
            System.out.println("通过键盘打电话");
        }
    
    }
    class SmartPhone extends Telphone {
        @Override
        public void call() {
            // TODO Auto-generated method stub
            System.out.println("可以通过语音打电话");
        }
        @Override
        public void message() {
            // TODO Auto-generated method stub
            System.out.println("可以通过语音发短信");
        }
    }
    public class Initail {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Telphone tel1=new CellPhone();
            tel1.call();
            tel1.message();
            Telphone tel2=new SmartPhone();
            tel2.call();
            tel2.message();
        }
    }
    疑问:
    @Override 为自动生成的代码,,是什么意思,有什么作用?
    @Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处: 
    1、可以当注释用,方便阅读;
    2、编译器可以给你验证 // TODO Auto-generated method stub 为自动生成的代码,,是什么意思,有什么作用?

    意思是告诉你这些代码是自动生成的,不是你自己写的,就是一个提示的作用,没大作用

    练习:

    现有shape图形类,他有两个图形类,用Rectangle矩形和Circle圆形子类,求圆形的周长和面积。

    package com.shape;
    public abstract class Shape {
        public abstract void CPerimeter();
        public abstract void CArea();
    }
    package com.shape;
    import java.util.Scanner;
    public class Rectangle extends Shape {
         int longs=0;
         int width=0;
         int perimeter=0;
         int area=0;    
        @Override
        public void CPerimeter() {
             int longs=0;
             int width=0;
             Scanner in=new Scanner(System.in);
             System.out.println("请输入长方形的长");
             longs=in.nextInt();
             System.out.println("请输入长方形的宽");
             width=in.nextInt();
            // TODO Auto-generated method stub
            perimeter=2*(longs+width);
            System.out.println("长方形周长为:"+perimeter);
        }
        @Override
        public void CArea() {
             int longs=0;
             int width=0;
             Scanner in=new Scanner(System.in);
             System.out.println("请输入长方形的长");
             longs=in.nextInt();
             System.out.println("请输入长方形的宽");
             width=in.nextInt();
            // TODO Auto-generated method stub
            area=longs*width;
            System.out.println("长方形面积为:"+area);
        }
    
    }
    package com.shape;
    import java.util.Scanner;
    public  class Circle extends Shape {
        @Override
        public void CPerimeter() {
            // TODO Auto-generated method stub
             double r=0;
             double perimeter=0;
             Scanner in=new Scanner(System.in);
             System.out.println("圆形的半径");
             r=in.nextInt();
             perimeter=2*(Math.PI )*r;
             System.out.println("圆形的周长为:"+perimeter);
        }
        @Override
        public void CArea() {
            // TODO Auto-generated method stub
             double r=0;
             double area=0;
             Scanner in=new Scanner(System.in);
             System.out.println("圆形的半径");
             r=in.nextInt();
             area=(Math.PI) *r*r;
             System.out.println("圆形的周长为:"+area);
        }
    }
    package com.shape;
    public class Initail {
        public static void main(String[] args)
        {
            Shape sh1=new Rectangle();
            Shape sh2=new Circle();
            sh1.CArea();
            sh1.CPerimeter();
            sh2.CArea();
            sh2.CPerimeter();
        }
    }
  • 相关阅读:
    HTML编写需要注意的事项
    Java中this、super用法
    多态性的表现形式
    面向对象
    用java实现冒泡排序法
    第一堂java web课
    mysql 复制中的 paxso 的两阶段和事务两阶段的区别
    github删除仓库
    git的介绍及使用
    github的介绍
  • 原文地址:https://www.cnblogs.com/excellencesy/p/7818574.html
Copyright © 2020-2023  润新知