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

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

2015-05-31 00:39 459 查看
——- android培训java培训、期待与您交流! ———-

一、 面向对象

面向对象设计程序的思想,执行变指挥

三大特征 封装 继承 多态

1. 继承

1.1 继承由来

多个类中,出现了相同的成员,代码重复就很高

例:以下程序代码重复过多,将相同的内容抽取来,形成另外的一个类,人类

class Teacher extends Person{

String name;

int age;

public void eat(){}

public void teacher(){}

}

class Student extends Person{

String name;

int age;

public void eat(){}

public void study(){}

}

子类共性抽取出父类,产生类和类之间的继承关系

让老师类,和学生类,都是使用人类中的成员,减少代码

使用 extends关键字写继承

class Person
{
String name;
int age;
public void eat(){}
}
class Teacher extends Person
{
public void teacher(){}
}

class Student extends Person
{
public void study(){}
}


好处: 代码减少,扩展性强,导致了多态

弊端:类耦合性强

1.2 继承特点

1——单继承

一个类只能同时继承一个父类,不能同时继承多个类

单继承为什么要这样设计:避免程序的安全问题

如果多继承,父类中出现了相同方法,子类中不
4000
能判断调用的是谁

Java设计的时候,取消了多继承

2——多层继承

多层继承,多重继承,不等于多继承类和类之间可以进行层层继承

A 是 B的父类,B是C的父类 C是D的父类

1.3 继承体系

类之间的关系 is … a

顶层类,是整个体系最共性的,底层类是整个体系最多,既有共性又有特性

学习顶层,使用底层

成员变量

2.1 子类有用子类,子类没有用父类

2.2 子类中super.调用父类成员变量

super 表示的意义,父类存储空间的标识

调用父类静态成员,使用类名调用

class Fu
{
int x = 1 ;
}
class Zi extends Fu
{
int x = 2;

public void show(){
int x = 3 ;
System.out.println(super.x);
}
}

class ExtendsDemo3
{
public static void main(String[] args)
{
Zi z = new Zi();
z.show();
System.out.println(z.x);
}
}


成员方法

3.1 子类覆盖父类方法

成员方法,如果子类有,运行子类,如果子类没有,运行父类

子类和父类中出现了一模一样的方法

方法的另一个特性,子类重写父类方法

3.2 权限大于等于父类,方法声明要一致

但是子类重写父类方法,必须保证子类方法权限大于或者等于父类方法权限

public > protected > 默认 >private

3.3 案例,手机扩展案例

class Phone
{
//打电话功能
public void call(){
System.out.println("拨号打电话");
}
//接电话功能
public void receive(){
System.out.println("铃声");
System.out.println("显示号码");
}
}

class NewPhone extends Phone
{
//打电话功能,手机拿在手上,就可以拨号
public void call(){
//拨号功能,父类已经实现了,子类没有必要自己在做了
//直接使用父类的功能
//调用父类的 call方法
super.call();
}

//接电话功能
public void receive(){
//铃声和号码显示,父类中已经实现过了,子类没有必要自己写
super.receive();
System.out.println("彩铃");
System.out.println("大头像");
System.out.println("归属地");
}

}
class ExtendsTest
{
public static void main(String[] args)
{
//创建手机对象,调用方法
Phone p = new Phone();
p.call();
p.receive();
System.out.println("=======================");
NewPhone np = new NewPhone();
np.call();
np.receive();
//System.out.println("Hello World!");
}
}


构造方法

创建子类对象的时候,父类构造方法也运行了

如果父类中重载了很多构造方法,对于子类的构造方法来讲

只要访问到其中一个即可

总结子类父类构造方法的特点

4.1 子类所有构造方法第一行就是super(),调用父类空参数构造方法

4.2 如果父类中没有空参数构造方法,子类构造方法必须手写super传递参数,否则编译失败

4.3 子类构造方法写this或者super,选择一个,保证子类可以间接或者直接访问过父类空参数构造

子类所有构造方法,无论如何必须访问过父类构造方法

class Fu
{

Fu(int a){
System.out.println("父类构造方法");
}
}
class Zi extends Fu
{
Zi(){
this(false);
System.out.println("子类构造方法");
}

Zi(boolean b){
super(0);
}
}

class ExtendsDemo5
{
public static void main(String[] args)
{
new Zi();

}
}


这是学习面向对象继承部分的总结,以及部分典型的代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 面向对象 继承