黑马程序员——面向对象---继承
2015-06-02 13:43
316 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
1.什么是继承
把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系, 这多个类就具备了这些内容。这个关系叫继承。
2.Java中如何表示继承呢?格式是什么呢?
A:用关键字extends表示 B:格式: class 子类名 extends 父类名 {}
/* 继承由来 多个类中,出现了相同的成员,代码重复就很高 以下程序代码重复过多,将相同的内容抽取来,形成另外的一个类,人类 让老师类,和学生类,都是使用人类中的成员,减少代码 老师类和学生类都使用人类中的成员,类与类之间产生关系才行 继承关系 extends //class Teacher extends Person 老师类,继承自人类 Teacher类,成为是Person的孩子,子类 Person类,成为是Teacher的父亲,父类,超类,基类 子类就可以直接使用父类的成员,不是全部 继承好处: 代码少了,减少编写量 子类可以扩展父类的功能 继承使类与类产生了关系,有了这个关系导致了面向对象第三个特征多态 */ //共性抽取出一个类 ,人类 class Person { String name; int age; public void eat(){} } class Teacher extends Person { public void teacher(){} } class Student extends Person { public void study(){} } class ExtendsDemo { public static void main(String[] args) { Teacher t = new Teacher(); System.out.println(t.name); } }
3.继承的好处:
A:提高了代码的复用性 B:提高了代码的维护性 C:让类与类产生了一个关系,是多态的前提
4.继承的弊端:
A:让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的类。 原则:低耦合,高内聚。 耦合:类与类的关系 内聚:自己完成某件事情的能力 B:打破了封装性
5.Java中继承的特点
A:Java中类只支持单继承
/* java中继承特点 class Demo{} class Demo1 extends Demo{} class Demo2 extends Demo{} 单继承,一个类只能同时继承一个父类,不能同时继承多个类 一个孩子,父亲只能有一个 一个父类,可以有多个子类 单继承为什么要这样设计:避免程序的安全问题 如果多继承,父类中出现了相同方法,子类中不能判断调用的是谁 Java设计的时候,取消了多继承 */ class Fu { public void show(){ System.out.println("fu...show"); } } class Fu2 { public void show(){ System.out.println("fu2...show"); } } class Zi extends Fu { } class Zi2 extends Fu { } class ExtendsDemo1 { public static void main(String[] args) { new Zi2().show(); //System.out.println("Hello World!"); } }
B:Java中可以多层(重)继承(继承体系)
/* java中继承特点,多层继承,多重继承,不等于多继承 类和类之间可以进行层层继承 A 是 B的父类,B是C的父类 C是D的父类 父类是子类共性抽取出来的,A类是整个4个类中,最共性的类 */ class A { public void show(){} } class B extends A { public void b(){} } class C extends B { } class D extends C { } class ExtendsDemo2 { public static void main(String[] args) { new D().show(); System.out.println("Hello World!"); } }
6.继承的注意事项:
A:子类不能继承父类的私有成员 B:子类不能继承父类的构造方法,但是可以通过super去访问 C:不要为了部分功能而去继承
7.什么时候使用继承呢?
A:继承体现的是:is a的关系。 B:采用假设法
8.Java继承中的成员关系
A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单 b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢? 子类的方法访问变量的查找顺序: 在子类方法的局部范围找,有就使用。 在子类的成员范围找,有就使用。 在父类的成员范围找,有就使用。 找不到,就报错。 B:构造方法 a:子类的构造方法默认会去访问父类的无参构造方法 是为了子类访问父类数据的初始化 b:父类中如果没有无参构造方法,怎么办? 子类通过super去明确调用带参构造 子类通过this调用本身的其他构造,但是一定会有一个去访问了父类的构造 让父类提供无参构造 C:成员方法 a:子类的成员方法和父类中的成员方法名称不一样,这个太简单 b:子类的成员方法和父类中的成员方法名称一样,这个怎么访问呢? 通过子类对象访问一个方法的查找顺序: 在子类中找,有就使用 在父类中找,有就使用 找不到,就报错
9.注意:
A:Override和Overload的区别?Overload是否可以改变返回值类型? 方法重写: 在子类中出现了和父类一模一样的方法声明的现象。 方法重载: 在同一个类中出现的方法名相同,方法参数列表不同的现象。 方法重载能改变返回值类型,因为它和返回值类型无关。 Override:方法重写 Overload:方法重载 B:this和super的区别和各自的作用? this:当前类的对象的引用 super:代表父类存储空间的标识(也可以理解为父类的引用,通过这个东西可以仿佛父类的成员)。
10.案例:
学生和老师案例
/* 学生类和老师类 共性,抽取形成一个父类,父类中的成员变量,私有的 代码. */ //将老师和学生类的共性抽取,一个父类 class Person { private String name; private int age; public void setName(String name){this.name = name;} public void setAge(int age){this.age = age;} public String getName(){return name;} public int getAge(){return age;} } //定义老师类,姓名,年龄,上课方法 class Teacher extends Person { public void teacher(){ //老师的上课方法,输出姓名和年龄 System.out.println(getName()+getAge()); } } //定义学生类,姓名,年龄,学习方法 class Student extends Person { public void study(){ //学生的学习方法,输出姓名和年龄 System.out.println(getName()+getAge()); } } class ExtendsTest1 { public static void main(String[] args) { //创建老师类和学生类对象 Teacher t = new Teacher(); Student s = new Student(); //调用对象set方法赋值 t.setName("张三"); t.setAge(20); s.setName("李四"); s.setAge(18); t.teacher(); s.study(); } }
相关文章推荐
- PHP类继承 extends使用介绍
- java中extends与implements的区别浅谈
- 第五章 继承
- 黑马程序员_继承与多态
- 黑马程序员-继承
- 面向对象--继承、接口
- Java继承
- cocos2dx-lua class语法糖要注意了
- Java泛型的边界问题
- java继承
- Java类的继承
- 类的继承(extends)与重载(parent::)
- JAVA基础笔记——几个关键字
- Java 学习笔记(基本概念)
- 设计模式之类之间的关系
- jQuery.extend详解。
- 在jsp中实现"类"的继承关系
- Class属性Extends和Implements的区别
- Ibatis的extends
- 泛型中<? extends T>和<? super T> 区别