码迷,mamicode.com
首页 > 其他好文 > 详细

day6 面向对象(3)

时间:2016-10-12 00:34:55      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

继承

1.1   类和类之间的常见关系。

    1:既然继承是描述类和类之间的关系,就需要先来了解类和类之间的常见关系

1.1.1   现实生活的整体与部分

举例说明

1:现实生活

    1:学生   是人 

    2:狗     是动物

    3:球队 包含 球员 整体与部分的关系,部分可以删除和增加

    4:笔记本包含 cpu 整体与部分的关系,部分不可以删除和增加

    5:航母编队 包含(航母 护卫舰 驱逐舰 舰载机 核潜艇)

1.1.2   java中的类与类关系

java中的类关系

1:is a 关系 (学生是人)

2:has a 整体与部分

技术分享
 1 class Person{
 2     String name;
 3     int age;
 4     Address add;
 5     
 6     Person(){
 7         
 8     }
 9     Person(String name,int age,Address add){
10         
11         this.name=name;
12         this.age=age;
13         this.add=add;
14         
15     }
16     
17     void speak(){
18         System.out.println("姓名:"+name+" 年龄:"+age+" "+add.print());
19     }
20 }
21 class Address{
22     String country;
23     String city;
24     String street;
25     
26     Address(){
27     
28     }
29     Address(String country,String city,String street){
30         this.country=country;
31         this.city=city;
32         this.street=street;
33     }
34     
35     String print(){
36         return "地址:"+country+" "+"城市:"+city+"  街道;"+street;
37     }
38 }
39 class Demo3{
40 
41     public static void main(String[] args){
42         
43         Address add=new Address("中国","广州","棠东东路");
44         Person p=new Person("jack",27,add);
45         p.speak();
46         
47         
48         System.out.println();
49          }
50 }
51     
View Code

继承

    1:描述一个学生类

       1:姓名年龄学号属性,学习的方法

    2:描述一个工人类

       1:姓名年龄工号属性,工作的方法

    3:描述一个人类

       1:姓名年龄属性,说话的方法。

  4:发现学生类和人类天生有着联系,学生和工人都是人。所以人有的属性和行为学生和工人都会有。出现类代码重复

技术分享
 1 class Person {
 2     String name;
 3     int age;
 4 
 5     // 静态变量(类变量)对象和对象之间的代码重复使用静态变量
 6     static String country = "CN";
 7 
 8     Person() {
 9 
10     }
11 
12     void speak() {
13         System.out.println(name + ":哈哈,我是人!!!");
14     }
15 
16 }
17 
18 // 让学生类和人类产生关系,发现学生is a 人,就可以使用继承
19 class Student {
20 
21     String name;
22     int age;
23 
24     Student() {
25 
26     }
27 
28     void study() {
29         System.out.println("姓名:" + name + "年纪:" + age + ":好好学习");
30     }
31 }
32 
33 class Worker {
34     String name;
35     int age;
36 
37     void work() {
38         System.out.println(name + ":好好工作,好好挣钱。");
39     }
40 
41 }
42 
43 class Demo1 {
44 
45     public static void main(String[] args) {
46         Student s = new Student();
47         s.name = "jack";
48         s.age = 20;
49         s.study();
50 
51         Worker w = new Worker();
52         w.name = "rose";
53 
54         w.work();
55     }
56 }
View Code

    5:问题:

       1:如果没有继承,出现类和类的关系无法描述

       2:如果没有继承,类和类之间有关系会出现类和类的描述代码的重复。

继承特点

    1:描述类和类之间的关系

    2:降低类和类之间的重复代码

  1:降低对象和对象之间的代码重复使用静态变量

    2:降低类和类之间的代码重复使用就继承

extends关键字

继承使用extends关键字实现

1:发现学生是人,工人是人。显然属于is a 的关系,is a就是继承。

2:谁继承谁?

    学生继承人,发现学生里的成员变量,姓名和年龄,人里边也都进行了定义。有重    复代码将学生类的重复代码注释掉,创建学生类对象,仍然可以获取到注释的成员。这就是因为继承的关系,学生类(子类)继承了人类(父类)的部分

技术分享
 1 class Person {
 2     String name;
 3     int age;
 4 
 5     // 静态变量(类变量)对象和对象之间的代码重复使用静态变量
 6     static String country = "CN";
 7 
 8     Person() {
 9 
10     }
11 
12     void speak() {
13         System.out.println(name + ":哈哈,我是人!!!");
14     }
15 
16 }
17 
18 // 让学生类和人类产生关系,发现学生is a 人,就可以使用继承
19 class Student extends Person {
20 
21     Student() {
22 
23     }
24 
25     void study() {
26         System.out.println("姓名:" + name + "年纪:" + age + ":好好学习");
27     }
28 }
29 
30 class Worker extends Person {
31 
32     void work() {
33         System.out.println(name + ":好好工作,好好挣钱。");
34     }
35 
36 }
37 
38 class Demo1 {
39 
40     public static void main(String[] args) {
41         Student stu = new Student();
42         stu.name = "jack";
43         stu.age = 20;
44         stu.study();
45         stu.speak();
46         System.out.println(stu.country);
47         System.out.println(Student.country);
48 
49         Worker worker = new Worker();
50         worker.name = "rose";
51         System.out.println(worker.country);
52         worker.work();
53         worker.speak();
54 
55         System.out.println();
56     }
57 }
View Code

继承细节;      

    1:类名的设定,被继承的类称之为父类(基类),继承的类称之为子类

    2:子类并不能继承父类中所有的成员

1:父类定义完整的成员 静态成员,非静态,构造方法。静态变量和静态方

法都可以通过子类名.父类静态成员的形式调用成功。

       2:所有的私有成员不能继承,private修饰的成员。

       3:构造函数不能被继承

 

    3:如何使用继承

1:不要为了使用继承而继承。工人和学生都有共性的成员,不要为了节省代

码,让工人继承学生。

技术分享
 1 /*
 2 如何使用继承:验证是否有 is  a 的关系
 3  例如:学生是人, 小狗是动物
 4  注意:不要为了使用某些功能而继承,java只支持单继承
 5  */
 6 class DK {
 7 
 8     void Ip4S() {
 9         System.out.println("好玩");
10     }
11 }
12 
13 class BGir extends DK {
14 
15 }
16 
17 class Demo {
18 
19     public static void main(String[] args) {
20 
21         new BGir().Ip4S();
22 
23     }
24 }
View Code

super关键字

    1:定义Father(父类)类

       1:成员变量int x=1;

       2:构造方法无参的和有参的,有输出语句

    2:定义Son类extends Father类

       1:成员变量int y=1;

       2:构造方法无参和有参的。有输出语句

       1:this.y=y+x;

    3:创建Son类对象

       Son son=new Son(3);

       System.out.println(son.y); //4

技术分享
 1 class Father {
 2     int x = 1;
 3 
 4     Father() {
 5         System.out.println("这是父类无参构造");
 6     }
 7 
 8     Father(int x) {
 9 
10         this.x = x;
11         System.out.println("这是父类有参构造");
12     }
13 
14     void speak() {
15         System.out.println("我是父亲");
16     }                  
17 }
18 
19 class Son extends Father {
20     int y = 1;
21 
22     Son() {
23         System.out.println("这是子类的无参构造");
24     }
25 
26     Son(int y) {
27 
28         this.y = y + x;
29         System.out.println("这是子类的有参构造");
30     }
31 
32     void run() {
33         super.speak(); // 访问父类的函数
34         System.out.println("我是儿子");
35     }
36 }
37 
38 class Demo6 {
39 
40     public static void main(String[] args) {
41         Son s = new Son(3);
42         System.out.println(s.y);// 4
43     }
44 }
View Code
技术分享
 1 class Father {
 2     int x = 1;
 3 
 4     Father() {
 5         System.out.println("这是父类无参构造");
 6     }
 7 
 8     Father(int x) {
 9 
10         this.x = x;
11         System.out.println("这是父类有参构造");
12     }
13 
14     void speak() {
15         System.out.println("我是父亲");
16     }                  
17 }
18 
19 class Son extends Father {
20     int y = 1;
21 
22     Son() {
23         System.out.println("这是子类的无参构造");
24     }
25 
26     Son(int y) {
27 
28         this.y = y + x;
29         System.out.println("这是子类的有参构造");
30     }
31 
32     void run() {
33         super.speak(); // 访问父类的函数
34         System.out.println("我是儿子");
35     }
36 }
37 
38 class Demo6 {
39 
40     public static void main(String[] args) {
41         Son s = new Son(3);
42         System.out.println(s.y);// 4
43     }
44 }
View Code

 

day6 面向对象(3)

标签:

原文地址:http://www.cnblogs.com/Michael2397/p/5951004.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!