黑马程序员——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培训、期待与您交流! ----------
<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培训、期待与您交流! ----------
相关文章推荐
- 黑马程序员——final
- 程序员如何尽快变的稍微专业一点
- 黑马程序员——多态
- 黑马程序员——构造函数
- 一位前辈工程师职业发展的忠告
- 黑马程序员——私有private
- 如何做个好员工(转载)
- ——黑马程序员——OC中Foundation框架NSString用法总结
- 黑马程序员--IO(一)--概述、字符流、字节流、流操作规律
- 转:女程序员的微博
- 成为专业程序员的6个技巧
- 黑马程序员_java多线程的同步和死锁
- 黑马程序员_自定义异常
- 老程序员应该记住的 5 件事
- 黑马程序员_继承
- 黑马程序员_IO流BufferWriter、BufferReader
- 黑马程序员-java多线程
- Reverse Linked List
- 黑马程序员-Java异常处理机制
- 黑马程序员_MRC2