您的位置:首页 > 职场人生

黑马程序员——面向对象---继承

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  extends