java面向对象之继承

标签: java
2人阅读 评论(0) 收藏 举报
分类:

继承(inheritance)

Java支持单继承:一个类只能有一个直接父类

                关键字:extends

                  class Student extends Person{...}

注:如果没有extends子句,则该类默认为java.lang.Object的子类,所有的类都是通过直接或间接的继承java.lang.Object。

            继承则相当于is--a的关系

继承的好处
1)提供了代码的复用性,解决了代码的臃肿;
2)它是多态的前提。

Java中继承的特点
子类继承了父类所有的东西,但是子类不能使用父类私有的东西,只能通过访问父类共有的方法间接的让子类访问它。

Java中继承的注意事项?以及我们什么时候使用继承?
A:子类只能继承父类非私有成员(成员方法和成员变量)
B:   子类不能继承父类的构造方法,但是可以通过super关键字去访问父类的构造方法

C:   不要为了部分功能去继承

案例分析:
package Test;

/*
猫狗案例

先找到具体的事物,然后发现具体的事物有共性,才提取出一个父类。

猫:
	成员变量:姓名,年龄,颜色
	构造方法:无参,带参
	成员方法:
		getXxx()/setXxx()
		eat()
		palyGame()
狗:
	成员变量:姓名,年龄,颜色
	构造方法:无参,带参
	成员方法:
		getXxx()/setXxx()
		eat()
		lookDoor()
		
共性:
	成员变量:姓名,年龄,颜色
	构造方法:无参,带参
	成员方法:
		getXxx()/setXxx()
		eat()
		
把共性定义到一个类中,这个类的名字叫:动物。
动物类:
	成员变量:姓名,年龄,颜色
	构造方法:无参,带参
	成员方法:
		getXxx()/setXxx()
		eat()
		
	猫:	
		构造方法:无参,带参
		成员方法:palyGame()
	狗:
		构造方法:无参,带参
		成员方法:lookDoor()
*/
//定义动物类
class Animal {
//姓名
private String name;
//年龄
private int age;
//颜色
private String color;

public Animal() {}

public Animal(String name,int age,String color) {
	this.name = name;
	this.age = age;
	this.color = color;
}


public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

public int getAge() {
	return age;
}

public void setAge(int age) {
	this.age = age;
}

public String getColor() {
	return color;
}

public void setColor(String color) {
	this.color = color;
}

public void eat() {
	System.out.println("不要睡了,该吃饭了");
}
}

//定义猫类
class Cat extends Animal {
public Cat() {}

public Cat(String name,int age,String color) {
	super(name,age,color);
}

public void playGame() {
	System.out.println("猫玩英雄联盟");
}
}

//定义狗类
class Dog extends Animal {
public Dog() {}

public Dog(String name,int age,String color) {
	super(name,age,color);
}

public void lookDoor() {
	System.out.println("狗看家");
}
}

//测试类
class Test{
public static void main(String[] args) {
	//测试猫
	//方式1
	Cat c1 = new Cat();
	c1.setName("Tom");
	c1.setAge(3);
	c1.setColor("白色");
	System.out.println("猫的名字是:"+c1.getName()+";年龄是:"+c1.getAge()+";颜色是:"+c1.getColor());
	c1.eat();
	c1.playGame();
	System.out.println("---------------");
	
	//方式2
	Cat c2 = new Cat("杰瑞",5,"土豪金");
	System.out.println("猫的名字是:"+c2.getName()+";年龄是:"+c2.getAge()+";颜色是:"+c2.getColor());
	c2.eat();
	c2.playGame();
	
	//测试狗
	//方式1
	Dog d1 = new Dog();
	d1.setName("Jem");
	d1.setAge(6);
	d1.setColor("红色");
	System.out.println("狗的名字是:"+d1.getName()+";年龄是:"+d1.getAge()+";颜色是:"+d1.getColor());
	d1.eat();
	d1.lookDoor();
	System.out.println("---------------");
	
	//方式2
	Dog d2 = new Dog("汪汪",8,"深灰");
	System.out.println("狗的名字是:"+d2.getName()+";年龄是:"+d2.getAge()+";颜色是:"+d2.getColor());
	d2.eat();
	d2.lookDoor();
}
}
运行结果如下:
猫的名字是:Tom;年龄是:3;颜色是:白色
不要睡了,该吃饭了
猫玩英雄联盟
---------------
猫的名字是:杰瑞;年龄是:5;颜色是:土豪金
不要睡了,该吃饭了
猫玩英雄联盟
狗的名字是:Jem;年龄是:6;颜色是:红色
不要睡了,该吃饭了
狗看家
---------------
狗的名字是:汪汪;年龄是:8;颜色是:深灰
不要睡了,该吃饭了
狗看家
方法重写和方法重载的区别?
Overload:方法重载 方法名一样,参数不同(1、参数类型不同 2、参数个数不同),和返回值没有关系

Override:方法重写 子类定义和父类一模一样的方法声明,实现对父类方法的覆盖

super的使用:

1)使用super访问父类的域和方法(在覆盖父类方法的同时,又利用已定义好的父类的方法)

                使用super可以访问被子类所隐藏的同名变量

                当覆盖父类的同名方法的同时,又要调用父类的方法,就必须使用super

2)使用父类的构造方法(构造方法不能被继承)

                如:父类Person有一构造方法Person(String ,  int)不能说子类Student也自动有一个构造方法Student(String ,  int)

                       但,子类在构造方法中,可以用super来调用父类的构造方法,使用时,super()必须放在第一句。

//Student类中的构造方法
Student (String name , int age , String school)
{
   super(name, age);//super()必须放在第一句!
   this.school = school;
}
父类对象与子类对象的转换:

1)向上转型:父类的引用指向子类对象 Father f  = new Son() ;   
2)向下转型:将父类的引用强制转换子类的引用 Son s = (Son) f;



查看评论

Java面向对象

这门课程是让初学者开始接触面向对象编程思想,为日后的项目开发做准备。
  • 2017年01月30日 17:10

java-面向对象编程-三大特性之继承

面向对象的编程语言,拥有三大特性,分别是:“继承”,“多态”,“封装”。这三个特性贯穿了面向对象编程语言的方方面面,也是区别于面向过程语言的三个标志。所以,掌握这三个特性,将有助于你在学习面向对象编程...
  • dengminghli
  • dengminghli
  • 2017-01-15 21:36:31
  • 1721

重新认识java(三) ---- 面向对象之继承!

学习一个新知识的第一步,就是要知道它是什么,然后要知道为什么要用它,最后要知道如何使用它。这篇文章,我们重新认识一下java中的继承。...
  • qq_31655965
  • qq_31655965
  • 2016-11-29 22:16:46
  • 2792

java面向对象的四大特性-多态,继承,抽象,封装

1.多态 面向对象的四大特性:封装、继承、多态、抽象。从一定角度来看,封装和继承几乎都是为多态而准备的。是最重要的知识点。多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对...
  • basycia
  • basycia
  • 2016-07-07 12:54:26
  • 4977

面向对象_继承案例和继承的好处与继承的弊端

/* 继承概述: 把多个类中相同的内容给提取出来定义到一个类中。 如何实现继承呢? java提供了关键字:extends 格多: //class 子类名,派生类名 extends 父类名,基类名,...
  • L1585931143
  • L1585931143
  • 2016-09-26 22:13:17
  • 1365

JAVA面向对象 类的继承

本页面更新日期: 2016年07月30日前言 继承是面向对象的三大特征之一. 也是实现软件复用的重要手段. Java继承具有单继承的特点, 每个子类只有一个直接父类. 继承的特点 ...
  • tmdlife
  • tmdlife
  • 2016-07-26 20:10:40
  • 2109

java 面向对象 继承 PDF格式

  • 2010年07月22日 19:16
  • 304KB
  • 下载

4 面向对象(传参数)(继承)

JAVA SE Lesson 1 1. 类是一种抽象的概念,对象是类的一种具体表示形式,是具体的概念。先有类,然后由类来生成对象(Object)。对象又叫做实例(Instance)。 2. 类由两...
  • u010723709
  • u010723709
  • 2014-06-30 10:57:32
  • 670

Java面向对象:封装、继承、多态

为什么要面向对象编程? 以前开发的过程通常是采用面向过程编程,面向过程是以过程为中心来进行编程设计,本质上是分析出需要哪些过程,在编程时一步步的对其实现,但是随着软件规模的扩大,这种面向过程的设计模式...
  • wangyang1354
  • wangyang1354
  • 2015-09-30 16:44:06
  • 1536

java面向对象一:实现继承、重载、重写

一、继承:根据现有类(一个写好的类)的功能来创建新类(利用现有类创建)的过程 二、多态:一个对象不同的表现形态(重载/重写)...
  • heart_1014
  • heart_1014
  • 2016-07-13 15:22:01
  • 610
    个人资料
    等级:
    访问量: 7
    积分: 11
    排名: 244万+
    文章分类
    文章存档