zoukankan      html  css  js  c++  java
  • Java学习个人备忘录之抽象类

    抽象类

    特点:
    1. 方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰,抽象方法必须定义在抽象类中。该类必须也被abstract修饰
    2. 抽象类不可以被实例化. 为什么?  因为调用抽象方法没意义。
    3. 抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化,否则,这个子类还是抽象类。

    abstract class 犬科
    { 
    	abstract/*抽象*/ void show();
    }//抽象方法所在的类也必须的抽象的.
    
    class 狗 extends 犬科
    {
    	void 吼叫()
    	{
    		System.out.println("汪汪");
    	}
    }
    
    class 狼 extends 犬科
    {
    	void 吼叫()
    	{
    		System.out.println("嗷嗷");
    	}
    }
    
    class AbstractDemo
    {
    	public static void main(String[] args)
    	{
    
    	}
    }


    细节理解:

    1. 抽象类中有构造函数吗?
    有,用于给子类对象进行初始化.

    2. 抽象类可以不定义抽象方法吗?
    可以,但是很少见,目的就是不让该类创建对象. AWT的适配器对象就是这种类.
    通常这个类中的方法有方法体,但是却没有内容.

    abstract class Demo
    {
    	void show1()
    	{}
    
    	void show2()
    	{}
    }

    3. 抽象关键字不可以和哪些关键字共存?
    private  因为抽象方法要被覆盖
    static  有它就不需要创建对象
    final 不能被继承

    4. 抽象类和一般类的区别
    相同点:
    抽象类和一般类都是用来描述事物的,都在内部定了成员。
    不同点:
      1. 一般类有足够的信息描述事物,抽象类描述事物的信息有可能不足。
      2. 一般类中不能定义抽象方法,抽象类中可以定义抽象方法。
      3. 一般类可以被实例化,抽象类不可以被实例化。


    5. 抽象类一定是个父类吗?
    是的,因为需要子类覆盖其方法后才可以对子类实例化。

    雇员示例:
    需求: 公司中程序员有姓名,工号,薪水,工作内容。
    项目经理除了有姓名,工号,薪水,还有奖金,工作内容。
    对给除需求进行数据建模。

    分析:
    在这个问题领域中,先找出涉及的对象。
    通过名词提炼法。
    程序员:
    属性: 姓名,工号,薪水
    行为: 工作
    经理:
    属性: 姓名,工号,薪水,奖金
    行为: 工作

    程序员和经理不存在着直接继承关系,
    但是程序员和经理却具有共性内容。
    可以进行抽取. 因为他们都是公司的雇员。

    可以将程序员和经理进行抽取,建立体系。

    描述雇员

    abstract class Employee
    {
    	private String name;
    	private String id;
    	private double pay;
    	Employee(String name,String id,double pay)
    	{
    		this.name = name;
    		this.id = id;
    		this.pay = pay;
    	}
    
    	public abstract void work();
    }


    描述程序员

    class Programmer extends Employee
    {
    	Programmer(String name,String id,double pay)
    	{
    		super(name,id,pay);
    	}
    	public void work()
    	{
    		System.out.println("code....");
    	}
    }


    描述经理

    class Manager extends Employee
    {
    	private int bonus;
    	Manager(String name,String id,double pay,int bonus)
    	{
    		super(name,id,pay);
    		this.bonus = bonus;
    	}
    	public void work()
    	{
    		System.out.println("manage");
    	}
    }
    我是Vector,谢谢关注。
  • 相关阅读:
    700. Search in a Binary Search Tree
    100. Same Tree
    543. Diameter of Binary Tree
    257. Binary Tree Paths
    572. Subtree of Another Tree
    226. Invert Binary Tree
    104. Maximum Depth of Binary Tree
    1、解决sublime打开文档,出现中文乱码问题
    移植seetafaceengine-master、opencv到ARM板
    ubuntu16.04-交叉编译-SeetaFaceEngine-master
  • 原文地址:https://www.cnblogs.com/vector121/p/7470521.html
Copyright © 2011-2022 走看看