首页 > 代码库 > day6 面向对象(3)
day6 面向对象(3)
继承
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
继承
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 }
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 }
继承细节;
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 }
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);// 443 }44 }
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);// 443 }44 }
day6 面向对象(3)