大数据--Java面向对象

 

项目:客户关系管理系统(略)

    • 项目中不包含新知识点

    • 项目的业务逻辑相较于普通的练习来说,更复杂一些。

 

知识点1:子类对象实例化的过程

1. 从结果上来说:体现为类的继承性
* 子类继承父类以后,当创建子类对象时,堆空间中除了会加载子类自己特有的属性之外,还会加载其所有的父类
* 中的属性。当权限允许的情况下,子类对象可以调用父类的属性。
*
* 2. 从过程上来看:
* 当我们子类构造器创建子类对象时,一定会直接或间接的调用其父类的构造器,乃至于父类的父类的构造器,。。。
* 直到调用了java.lang.Object类的构造器。由于我们加载过子类的所有的父类的构造器,所有,我们在堆空间
* 中就存在子类及其所有父类中声明的属性了。
*
* 3. 明确:此时在内存空间中,只存在唯一的一个对象。即为new后面子类的对象。

 

知识点2:多态性及其应用

what?

面向对象的特征之三:多态性的使用
*
* 1.多态性:一个事物的多种形态。
*
* 2.广义上的多态性:① 方法的重写 ② 子类对象的多态性
*
* 3. 子类对象的多态性:父类的引用指向子类的对象。(或子类的对象赋给父类的引用)

 

how?

4. 子类对象的多态性的应用:虚方法调用(virtual method)
* 编译时,引用变量p2只能调用父类声明的方法。当运行时,实际执行的是子类重写父类的方法。
* 简称:编译看左边,运行看右边。
*
* 5. 子类对象的多态性使用的前提:① 类的继承性 ② 方法的重写
*
* 6. 子类对象的多态性不适用于属性、构造器。

 

对应的代码

 1 public class PersonTest {
 2     public static void main(String[] args) {
 3         Person p1 = new Person();
 4         Man m1 = new Man();
 5 
 6         p1.eat();
 7         p1.walk();
 8 
 9         m1.eat();
10         m1.earnMoney();
11 
12         int i = 10;
13         float f = 10.0F;
14 
15         //自动类型提升
16         double d = 10;
17         System.out.println("#######################");
18 
19         //子类对象的多态性
20         Person p2 = new Man();
21 
22         //多态性的应用:虚方法调用(virtual method)
23         //编译时,引用变量p2只能调用父类声明的方法。当运行时,实际执行的是子类重写父类的方法。
24         p2.eat();
25         p2.walk();
26         //编译不通过。
27 //        p2.earnMoney();
28 
29         System.out.println(p2.id);//1001
30     }
31 }

其中,相关的类定义如下:

 1 package com.atguigu.java;
 2 
 3 /**
 4  * @author shkstart
 5  * @create 2020-07-06 15:35
 6  */
 7 public class Person {
 8     String name;
 9     int age;
10     int id = 1001;
11 
12     public void eat(){
13         System.out.println("人:吃饭");
14     }
15 
16     public void walk(){
17         System.out.println("人:走路");
18     }
19 }
20 
21 package com.atguigu.java;
22 
23 /**
24  * @author shkstart
25  * @create 2020-07-06 15:39
26  */
27 public class Woman extends Person {
28 
29     boolean isBeauty;
30 
31     public void eat(){
32         System.out.println("女人:少吃饭,减肥");
33     }
34 
35     public void walk(){
36         System.out.println("女人:窈窕的走路");
37     }
38 
39     public void goShopping(){
40         System.out.println("女人心情不好使,一逛街就心情愉悦");
41     }
42 }
43 package com.atguigu.java;
44 
45 /**
46  * @author shkstart
47  * @create 2020-07-06 15:36
48  */
49 public class Man extends Person {
50 
51     boolean isSmoking;
52     int id = 1002;
53 
54     public void eat(){
55         System.out.println("男人:多吃肉,长肌肉");
56     }
57 
58     public void walk(){
59         System.out.println("男人:笔挺的走路");
60     }
61 
62     public void earnMoney(){
63         System.out.println("男人挣钱养家...");
64     }
65 
66 }

why?

  1 package com.atguigu.java;
  2 
  3 /**
  4  * 多态性的使用举例
  5  *
  6  * @author shkstart
  7  * @create 2020-07-06 16:18
  8  */
  9 //举例一:
 10 public class AnimalTest {
 11 
 12     public static void main(String[] args) {
 13         AnimalTest test = new AnimalTest();
 14 //        test.func(new Animal());
 15         test.func(new Dog());
 16         test.func(new Cat());
 17     }
 18 
 19     public void func(Animal animal) {//Animal animal = new Dog()
 20         animal.eat();
 21         animal.shout();
 22 
 23         if (animal instanceof Dog) {
 24             Dog dog = (Dog) animal;
 25             dog.protectHouse();
 26 
 27         }else if(animal instanceof Cat){
 28             Cat cat = (Cat)animal;
 29             cat.catchMouse();
 30         }
 31 
 32 
 33 //        animal.protectHouse();
 34     }
 35     //省略了重载的方法的定义。
 36 //    public void func(Dog dog){
 37 //        dog.eat();
 38 //        dog.shout();
 39 //    }
 40 //
 41 //    public void func(Cat cat){
 42 //        cat.eat();
 43 //        cat.shout();
 44 //    }
 45 }
 46 
 47 class Animal {
 48 
 49     public void eat() {
 50         System.out.println("动物进食");
 51     }
 52 
 53     public void shout() {
 54         System.out.println("动物叫~~");
 55     }
 56 
 57 }
 58 
 59 class Dog extends Animal {
 60     public void eat() {
 61         System.out.println("狗吃骨头");
 62     }
 63 
 64     public void shout() {
 65         System.out.println("汪~汪~汪~");
 66     }
 67 
 68     public void protectHouse() {
 69         System.out.println("狗能看门");
 70     }
 71 }
 72 
 73 class Cat extends Animal {
 74     public void eat() {
 75         System.out.println("猫吃鱼~");
 76     }
 77 
 78     public void shout() {
 79         System.out.println("喵~喵~喵~");
 80     }
 81 
 82     public void catchMouse() {
 83         System.out.println("猫抓老鼠");
 84     }
 85 }
 86 
 87 //举例二:
 88 /*
 89 class Customer{
 90     private Account acct;
 91 
 92     public void setAccount(Account acct){ //Account acct = new CheckAccount()
 93         this.account = account;
 94     }
 95 
 96 
 97 
 98 }
 99 
100 class Account{
101     double balance;
102 
103     //存钱、取钱
104 }
105 
106 class SavingAccount extends Account{}
107 
108 class CheckAccount extends Account{}
109 
110 
111 
112 
113  */
114 
115 //举例三:
116 /*
117 java.lang.Object类中定义的方法:
118 public boolean equals(Object obj){}
119 
120 
121  */
122 
123 //举例四:使用jdbc技术操作数据库:mysql\oracle\db2\sqlserver\....
124 //比如:jdbc中涉及一个父类:Connection。及其内部的一些关于操作数据库的通用方法。
125 /*
126 public void operateData(Connection conn){
127       //通过conn获取连接、传送sql语句、执行、....
128 }
129 
130 
131  */

知识点3:向下转型

 

 

 

 1 //可以考虑将声明为父类引用的子类对象,通过强转符的方式,将父类的引用再转为子类的引用
 2         Man m2 = (Man)p2;
 3         m2.isSmoking = true;
 4         m2.earnMoney();
 5         //强转时,可能出现类型转换异常:ClassCastException
 6 //        Woman w1 = (Woman)p2;
 7 //        w1.goShopping();
 8 //        w1.isBeauty = true;
 9 
10         //向下转型
11         //为了避免在强转时出现ClassCastException,我们在强转前,使用instanceof 进行判断即可。
12         /*
13         格式:a instanceof A:判断对象a是否是类型A的一个实例。
14               如果是,返回true。如果不是,返回false。
15 
16         补充:如果a instanceof A返回true,则a instanceof B也一定返回true。其中,类型B是类型A的父类。
17          */
18         Person p3 = new Woman();
19         if(p3 instanceof Woman){
20             Woman w2 = (Woman) p3;
21             System.out.println("可以转换为Woman");
22         }
23 
24         if(p3 instanceof Man){
25             Man m3 = (Man) p3;
26             System.out.println("可以转换为Man");
27         }
28 
29         if(p3 instanceof Person){
30             System.out.println("person .....");
31         }
32         if(p3 instanceof  Object){
33             System.out.println("Object...");
34         }

 

posted @ 2020-07-06 19:16  浪子逆行  阅读(6)  评论(0)    收藏  举报