您的位置:首页 > 职场人生

黑马程序员——abstract

2015-11-10 15:03 330 查看
------- android培训java培训、期待与您交流! ----------

<code class="hljs axapta has-numbering"><span class="hljs-comment">/*
抽象:看不懂。【abstract】关键词

当多个类中出现相同的功能,但是功能主体不同,这时可进行向上抽取。只抽取功能定义,而不抽取功能主体。

1:抽象方法【一定】在抽象类中
2:抽象【方法】和抽象【类】都【必须】在abstract关键词修饰
3:抽象类中【不可以】有new创建对象,因为调用抽象的方法没有意义
4:抽象类中的方法要被使用,必须有子类【复写所有】的抽象方法后,建立子类对象调用
如果子类只是覆盖了部分抽象分方法,那么该子类还是一个抽象类。

抽象类和一般类没有太大的不同:该如何描述就如何描述即可。
只不过该事物中出现了一些【看不懂】的东西这些不确定的部分也是该事物的【功能】需要明确出来,无法定义主体。

抽象类比一般类多个抽象函数,就是在类中可以定义抽象方法
抽象类不可以实例化。

特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。

abstract class Student//抽象类,无法创建对象,内有抽象方法

{
abstract void study();//抽象方法:功能需要直接明确(例如 abstract void study()),之后没有大括号(即没有具体方法,内容),强制子类去复写,建立自己的特殊内容,功能的多样性
}

class BaseStudent extends Student

{
void study()//函数声明一致
{
System.out.println("base study");//功能一(函数功能不同)子类复写实现多样功能
}
}
class AdvStudent extends Student

{
void study()//函数声明一致
{
System.out.println("Adv study");//功能二(函数功能不同)子类复写实现多样功能
}
}

class AbstractDemo

{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}

*/</span>

<span class="hljs-comment">/*
练习:假如我们开发一个系统,对员工进行建模 包含三个属性:姓名 工号 工资。经理也是员工,除了还有员工的属性之外 还有 奖金
请使用继承的思想设计出 员工类 经理类,要求提供必要的方法进行属性访问。

分析:
员工类 name id pay
经理类 继承(name id pay)+奖金(bonus)

*/</span>
<span class="hljs-keyword">abstract</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Employee</span>//雇员,类要抽象 <span class="hljs-title">abstract</span>
{</span>
<span class="hljs-keyword">private</span> String name;
<span class="hljs-keyword">private</span> String id;<span class="hljs-comment">//id会有部门 不光是数字 比如xx部门 xxx号</span>
<span class="hljs-keyword">private</span> <span class="hljs-keyword">double</span> pay;

Employee(String name,String id,<span class="hljs-keyword">double</span> pay)<span class="hljs-comment">//员工一初始化,基本属性都是需要具备的</span>
{
<span class="hljs-keyword">this</span>.name=name;<span class="hljs-comment">//this通常指代当前对象,super通常指代父类</span>
<span class="hljs-keyword">this</span>.id=id;
<span class="hljs-keyword">this</span>.pay=pay;
}

<span class="hljs-keyword">public</span> <span class="hljs-keyword">abstract</span> <span class="hljs-keyword">void</span> work();<span class="hljs-comment">//工作方法抽象,经理,员工 工作方法的多样性,功能需要声明,内容抽象掉</span>

}

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Manager</span> <span class="hljs-inheritance"><span class="hljs-keyword">extends</span></span> <span class="hljs-title">Employee</span>
{</span>
<span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> bonus;
Manager(String name,String id,<span class="hljs-keyword">double</span> pay,<span class="hljs-keyword">int</span> bonus)<span class="hljs-comment">//经理初始化属性都需要具备,多了一个奖金</span>
{
<span class="hljs-keyword">super</span>(name,id,pay);<span class="hljs-comment">//调用上面的(this通常指代当前对象,super通常指代父类)</span>
<span class="hljs-keyword">this</span>.bonus=bonus;<span class="hljs-comment">//特有的</span>
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> work()<span class="hljs-comment">//工作的多样性</span>
{
System.out.println(<span class="hljs-string">"manager work"</span>);
}

}
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Pro</span> <span class="hljs-inheritance"><span class="hljs-keyword">extends</span></span> <span class="hljs-title">Employee</span>
{</span>
Pro(String name,String id,<span class="hljs-keyword">double</span> pay)
{
<span class="hljs-keyword">super</span>(name,id,pay);<span class="hljs-comment">//this通常指代当前对象,super通常指代父类</span>
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> work()<span class="hljs-comment">//工作的多样性</span>
{
System.out.println(<span class="hljs-string">"pro work"</span>);
}
}</code>
------- android培训java培训、期待与您交流! ----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: