第05章(面向对象——中)

  1 /*****************
  2 ***第五章面向对象(中)
  3 *******知识点:
  4 **************1.多态
  5 ******************1.1 概念
  6 ******************1.2 实现方式
  7 **************2.抽象类
  8 ******************2.1 关键字
  9 ******************2.2 概念定义
 10 ******************2.3 使用
 11 **************3.接口
 12 ******************3.1 关键字
 13 ******************3.2 概念定义
 14 ******************3.3 使用
 15 ******************3.4 接口和抽象类的对比
 16 **************4.final修饰符
 17 ******************4.1 特征
 18 ******************4.2 使用
 19 **************5.static修饰符
 20 ******************5.1 特征
 21 ******************5.2 使用
 22 */
 23 public class test5{
 24     public static void main(String[] args){
 25         showDemo("1.多态");
 26         demoMultimodal();//演示多态
 27
 28         showDemo("2.抽象类");
 29         demoAbstractClass();//演示抽象类
 30
 31         showDemo("3.接口");
 32         demoInterface();//演示接口
 33
 34         showDemo("4.final修饰符");
 35         demoFinalKeyWord();//演示final
 36
 37         showDemo("5.static修饰符");
 38         demoStaticKeyWord();//演示static
 39
 40     }
 41
 42     /**1.多态**/
 43     public static void demoMultimodal(){
 44         Person p1 = new Person();//调用无参构造方法
 45         Person p2 = new Person(1,"ciade");//调用有参构造方法
 46         System.out.println("========");
 47         Boy b1 = new Boy();
 48         Boy b2 = new Boy(2,"ciade",25);
 49         System.out.println("========");
 50         p1.show();//父类调用父类方法
 51         System.out.println("========");
 52         b1.show();//子类调用子类方法(重载父类方法)
 53         System.out.println("========");
 54         p1 = b1 ;//父类对象指向子类引用后调用子类方法
 55         b1.show();
 56
 57         //总结:
 58         //        1.调用基类static(只会首次调用)
 59         //        2.调用本类static(只会首次调用)
 60         //        3.调用基类构造器
 61         //        4.调用本类构造器
 62         //初始化对象时调用顺序为 1->2->3->4
 63         //多态是什么 简单来说就是父类对象指向子类引用调用父类方法等同于子类对象调用子类该方法(该方法需要是重载父类的方法)
 64     }
 65
 66     /**2.抽象类**/
 67     public static void demoAbstractClass(){
 68         //2.1 关键字
 69         String[] s_AbstractClass =  {"abstract"};
 70         System.out.println("抽象类的关键字有:" + s_AbstractClass[0]);
 71
 72         //2.2 概念定义
 73         //抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念,
 74         //是对一系列看上去不同,但是本质上相同的具体概念的抽象,
 75         //我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象类
 76         //如:我们描述水果时。它就是一个抽象类。它有一些共性。比如质量,体积等。但又有一些不同。
 77         //比如 苹果、橙子等就有不同的颜色。不同的外观等。所以我们可以定义一个水果抽象类。其他类可以继承这个抽象类
 78
 79         //2.3 使用 注意事项
 80         // 1. 抽象类不能实例对象
 81         // 2. 可以带有抽象方法。继承子类必须重写所有的抽象方法(除非这个子类也是抽象类)
 82         // 3. 可以带有实现方法(注意区分 实现为空和实现不为空,抽象类两种均可)
 83         // 4. 可以带有数据成员
 84         // 5. 至少有一个抽象方法(即不能为空类)
 85         // 6. 抽象方法只能使用public、protected,默认情况是public
 86         // 7. 一个子类只能继承一个抽象类(跟继承类一致)
 87         // 8. 抽象类可以继承抽象类
 88         // 9. 抽象类可以实现接口
 89
 90         System.out.println("抽象类定义:\r\n"
 91                             + "public abstract class Fruit{ \r\n"
 92                             + "    ...... \r\n"
 93                             + "}"
 94                             );
 95     }
 96
 97     /**3.接口**/
 98     public static void demoInterface(){
 99         //3.1 关键字
100         String[] s_demoInterface = {"interface","implements"};
101         System.out.println("接口关键字有:" + s_demoInterface[0] + "," + s_demoInterface[1]);
102
103         //3.2 概念定义
104         //额。这个貌似不知道怎么解释了。暂时理解为一系列方法特征的集合吧。
105         System.out.println("接口定义方式为:\r\n "
106                             + "public interface 接口名字 {\r\n"
107                             + "    .....\r\n"
108                             + " }"
109                             );
110         //3.3 使用
111         System.out.println("接口实现方式为:\r\n "
112                             + "public class implements 接口名字 {\r\n"
113                             + "    .....\r\n"
114                             + " }"
115                             );
116         //注意事项:
117         //            1. 接口可以有变量和方法
118         //            2. 变量全部是public static final(有且只能有 外加默认)
119         //            3. 方法全部是public abstract(有且只能有 外加默认)
120         //            4. 接口可以实现接口(多个)
121         //            5. 类可以实现接口(多个)
122
123         //3.4 接口和抽象类的对比
124         //由上面可以得出对比如下:
125                             //1.语法上区别————定义不同,内部成员和方法不同,继承数量和实现数量不同
126                             //2.设计上区别————抽象必须重写所有抽象方法,而接口不需要(可以选择性重写)
127     }
128
129     /**4.final修饰符**/
130     public static void demoFinalKeyWord(){
131         //4.1 特征
132         //1.final类不能被继承,故不可能有子类
133         //2.final方法不能被重写(final类中的方法均为final)
134         //3.final变量只能赋值一次,后面值不能变(即需要在声明时立刻初始化)
135         //4.final关键字不能用于修饰构造方法
136
137         //4.2 使用
138         //1.final类   public final class A{}
139         System.out.println("1.final类   public final class A{}");
140         //2.final方法  public final void A(){}
141         System.out.println("2.final方法  public final void A(){}");
142         //3.final变量  public final in A = 1;(三种作用域  静态变量、成员变量、局部变量)
143         System.out.println("3.final变量  public final in A = 1;(三种作用域  静态变量、成员变量、局部变量)");
144     }
145
146     /**5.static修饰符**/
147     public static void demoStaticKeyWord(){
148         //5.1 特征
149         //1. 使用static修饰的方法和变量成为全局方法、全局变量(如果在类开始时定义属于类,不属于任何对象)
150         //2. 1.中的全局方法和全局变量也称为静态方法、静态变量
151         //3. 在实例化对象时会先调用static方法再调用非static方法 示例可见下面的Person类和Boy类(且只会调用一次)
152         //4. 任何实例均可访问静态方法和静态变量
153         //5. 在对象的方法中可以调用静态方法和静态变量
154         //6. 在静态方法中可以访问静态变量,但不能直接访问对象方法和变量
155         //7. 在和final组合成final static时用于定义常量(不可发生的变量)
156
157         //5.2 使用
158         /*
159             *用于演示static
160             */
161             /*
162             public class test5_1{
163
164                 public static int i = 0;
165
166                 static{
167                     System.out.println("static方法加载...");
168
169                 }
170                 public static int  show(){
171                         return i;
172                 }
173
174                 public int i_;
175
176                 public test5_1(){
177                     this.i_ = 1;
178                 }
179                 public test5_1(int i){
180                     this.i_ = i;
181                 }
182                 public int getI(){
183                     return this.i_;
184                 }
185
186                 public void showI(){
187                     System.out.println("非static调用static方法.... i:" + show());
188                 }
189
190                 public static void main(String[] args) throws Exception{
191                    System.out.println("static i:" + i);
192                    //getI();//会报错。  static方法中不能直接调用非static方法
193                    test5_1.i ++ ;
194
195                    System.out.println("static i:" + i);
196
197                    System.out.println("getI()...i_" + new test5_1(5).getI());//这样子可以调用非static方法
198
199                    test5_1 t = new test5_1();
200                    t.i++;
201                    t.showI();
202
203                 }
204
205             }*/
206     }
207
208     /*
209     *    抽取打印演示函数  用于打印演示功能提示
210     */
211     public static void showDemo(String demoStr){
212         System.out.println("演示:" + demoStr);
213     }
214
215 }
216
217
218 /*
219 *  演示基类
220 */
221 class Person{
222     private int id;
223     private String name;
224     static{
225         System.out.println("这是Person类的static方法在运行....");
226     }
227     public Person(){
228         this.id = 0;
229         this.name = "无名氏";
230         System.out.println("这是Person无参构造器在运行....");
231     }
232
233     public Person(int id,String name){
234         this.id = id;
235         this.name = name;
236         System.out.println("这是Person(id,name)有参构造器在运行....");
237     }
238
239     public void show(){
240         System.out.println("这是父类的show()方法——id:" + id + ",name:" + name);
241     }
242
243 }
244
245 /*
246 *  演示子类
247 */
248 class Boy extends Person{
249     private int age;
250     static{
251         System.out.println("这是Boy类的static方法在运行....");
252     }
253     public Boy(){
254         //super();  有无此行均会调用父类默认构造方法
255         //super(0,""); 有此行调用父类带参数构造方法
256         this.age = 0;
257         System.out.println("这是Boy无参构造器在运行....");
258     }
259
260     public Boy(int id,String name,int age){
261         super(id,name);  //有此行调用基类带参数构造方法  无此行会自行调用基类默认无参方法
262         this.age = age;
263         System.out.println("这是Boy(id,name,age)有参构造器在运行....");
264     }
265
266     //重写show()方法 用于实现多态
267     public void show(){
268         super.show();
269         System.out.println("这是子类的show()方法——age:" + age);
270     }
271
272
273
274 }
时间: 2024-08-06 11:43:21

第05章(面向对象——中)的相关文章

范磊 C++ 第6章 面向对象

1 // section_6.cpp : Defines the entry point for the console application. 2 //范磊C++ 第6章 面向对象 3 4 #include "stdafx.h" 5 #include "iostream" 6 7 8 9 //6.3.7 对象只能调用类中存在的方法(函数) 10 using std :: cout; 11 class Human 12 { 13 public: 14 void w

perl5 第十二章 Perl5中的引用/指针

第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用  子程序模板七.数组与子程序八.文件句柄的引用 一.引用简介    引用就是指针,可以指向变量.数组.哈希表(也叫关联数组)甚至子程序.Pascal或C程序员应该对引用(即指针)的概念很熟悉,引用就是某值的地址,对其的使用则取决于程序员和语言的规定.在Perl中,可以把引用称为指针,二者是通用的,无差别的.引用在创建复杂数据方面十分有用

《软件工程 ——理论、方法与实践》知识概括第七章 面向对象分析

第7章 面向对象分析    面向对象的分析模型:功能模型.分析对象模型.动态模型. 一.分析的概念 分析类可以划分为实体类.边界类和控制类. 在UML语言中,使用构造型<<entity>>.<<boundary>>和<<control>>分别表示实体类.边界类.控制类. 分析活动:理解用例模型.识别分析类(识别实体类.识别边界类.识别控制类).定义交互行为.建立分析类图(定义属性.定义行为.定义关系).评审分析模型.分析过程是一个循环

异步编程系列第05章 Await究竟做了什么?

p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提高下英文,用我拙劣的英文翻译一些重要的部分,纯属娱乐,简单分享,保持学习,谨记谦虚. 如果你觉得这件事儿没意义翻译的又差,尽情的踩吧.如果你觉得值得鼓励,感谢留下你的赞,愿爱技术的园友们在今后每一次应该猛烈突破的时候,不选择知难而退.在每一次应该独立思考的时候,不选择随波逐流,应该全力以赴的时候,不选择尽力而

第十九章 面向对象的工具

学习要点:1.OOP 的魔术方法2.类函数和对象函数3.OOP 的反射API PHP通过类和方法等语言结构支持面向对象编程.同时也通过对象相关的函数和内置类为面向对象提供广泛支持. 一.OOP的魔术方法 PHP引入了__autoload()内置方法来自动包含类文件.__autoload()应该被写成单个参数的方法.当PHP引擎遇到试图实例化未知类的操作时,会调用__autoload()方法,并将类名当作字符串参数传递给它. function __autoload($_className) { r

第05章-可视化技术(4)

[译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),由于时间关系,我们不能保证每周都能更新本书内容,但尽量做到一周更新一篇到两篇内容.敬请期待^_^.欢迎转载,另请转载时注明本文出处,谢谢合作!同时,由于译者水平有限,出错之处在所难免,欢迎指出订正!] [本小节内容对应原书的第112页至第117页] 5.3 规则网格可视化 规则网格在拓扑结构上规则

(转载)虚幻引擎3--第三章–Unreal中的类

第三章–Unreal中的类 3.1概述 3.2 NATIVE 对 非-NATIVE 3.3类声明 EXTENDS 关键字 指南 3.1您的第一个类声明 3.4类的修饰符 NATIVE(PACKAGENAME) NATIVEREPLICATION DEPENDSON(CLASSNAME[,CLASSNAME,...]) ABSTRACT DEPRECATED TRANSIENT NONTRANSIENT CONFIG(ININAME) Engine Editor Game Input PEROBJ

深入分析面向对象中的封装作用

之前我(梦在旅途)发表过一篇名为<深入分析面向对象中的对象概念>的文章,里面主要讲解了类与对象的关系以及对象的概念.状态.行为.角色几个知识点,让大家对对象有了一些深入的了解,而本文则再来谈谈面向对象的三大特性之一:封装,封装是实现面向对象的基础,深入的理解封装的特性,有利于我们能更好的领悟面向对象的思想以及实现面向对象编程.以下均为本人凭借多年开发经验总结的个人观点,大家若发现有误或不足的地方,欢迎指正和交流,谢谢! 一.什么是封装? 顾名思义,封:封闭,装:装起来,将具体的实现细节装到一个

第05章-可视化技术(2)

[译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),由于时间关系,我们不能保证每周都能更新本书内容,但尽量做到一周更新一篇到两篇内容.敬请期待^_^.欢迎转载,另请转载时注明本文出处,谢谢合作!同时,由于译者水平有限,出错之处在所难免,欢迎指出订正!] [本小节内容对应原书的第95页至第105页] 流线(Streamlines) 流线可以看做无重量