java面向对象特性-------继承

继承:

如果有一个类是动物类Animal,那么Animal类中的所有属性和方法在哺乳动物中也会有,那么哺乳动物就是动物的子类,动物是哺乳动物的父类。这种关系叫做继承。

  1. 继承的特点:子类继承父类的特征和行为,使得子类具有父类的各种属性和方法,或子类从父类继承方法,使得子类具有和父类相同的行为。

在继承关系中,父类更通用,子类更具体。父类具有更通用的特征和行为,而子类除了具有父类的特征和行为,还具有一些自己特殊的特征和行为。

  1. 继承的优点:继承可以有效的实现代码的复用,避免重复的代码的出现。当两个类具有相同的特征和行为的时候,可以将相同的部分抽取出来放到一个类中作为父类,让其他的两个类继承这个父类。

        被继承的类叫做父类(基类,超类)

        继承的类叫做子类

  1. 继承的语法:

[修饰符] class 类名 extends 父类名{

    //类的结构体

  }

在java中用extends关键字来表示一个类继承了另一个类。在父类中定义一些通用的方法和属性,子类自动去继承父类的属性和方法(私有的除外)。

例如:动物类Animal

package com.bxit;

/**

 * 动物的类

 * @author zhy

 *

 */

public  class Animal extends Animal1{

public static final double PI=3.14;//定义一个常量

private String name;//姓名

private double weight;//体重

private int age;//年龄

private double size;//大小

public double getWeight() {

return weight;

}

public void setWeight(double weight) {

this.weight = weight;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public double getSize() {

return size;

}

public void setSize(double size) {

this.size = size;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public   void eat(String nameq){

System.out.println(name+"在吃东西");

}

public Animal(String name) {

System.out.println("父类的构造方法被执行了");

}

public Animal(String name,int age) {

System.out.println("父类的构造方法被执行了");

}

public Animal() {

// TODO Auto-generated constructor stub

}

}

子类Cat:

package com.bxit1;

import com.bxit.Animal;

public class Cat extends Animal{

private String color;

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

//抓老鼠

public void mouse(){

System.out.println(getName()+"在抓老鼠");

}

public void test(){

eat("小黑");

}

//方法的重写

@Override//用来检查方法是否重写正确

public void eat(String name){

System.out.println(getName()+"在吃老鼠");

}

public Cat(){

//调用父类的两个参数的构造方法

super("cat");

System.out.println("子类的构造方法被执行了");

}

}

注意:

  子类不可以继承父类的那些属性和方法

          构造方法可以被子类调用,但是不可以被子类继承。

在java中一个类只能有一个直接的父类(单继承)但是间接的可以继承多个父类。

一个父类可以有很多个子类

  1. 父类的构造方法的调用:

在子类的构造方法中可以通关过super关键字来调用父类的构造方法

语法为:

super([参数列表]);    

注意:使用super调用父类的构造方法的时候,必须将super语句放在构造方法的第一行

  使用super调用父类中的构造方法的时候,父类中必须存在相应的构造方法   

例如:

public Cat(){

//调用父类的一个参数的构造方法

super("cat");

System.out.println("子类的构造方法被执行了");

}

  1. 继承的时候构造方法的调用顺序:  

1.如果创建子类的时候,子类中没有去调用父类中的构造方法,默认的会调用父类的无参的 构造方法。(有几个父类就会调用几个构造方法)。

2.构造方法调用的顺序是从最上层的父类开始。 

Object类:

在java中,java.lang.Object类是所有类的父类,当一个类没有使用extends关键字显式继承其他类的时候,该类默认继承了Object类,因此,所有的类都是Object类的子类,都具有Object类的方法和属性。能够被外界访问的Object类的主要成员方法有:

返回类型

方法名

方法说明

Object

clone()

创建并返回此对象的一个副本

boolean

equals(Object obj)

指示其他某个对象是否与此对象“相等”

void

finalize()

当垃圾回收器确定不存在对改对象的引用的时候,由对象的垃圾回收器调用此方法。

int

hashCode()

返回该对象的哈希码值

String

toString()

返回该对象的字符串表示

注意:所有的类都会直接或者间接的继承Object类。  

方法的重写:

在子类中可以重新的定义父类中的属性,重写父类中的方法可以获得与父类不同的功能。

  1. 重写条件:

     1.方法的名称必须相同

 2.访问权限的修饰符范围在重写的时候不能被缩小,只能是相等或者扩大。

 3.方法的返回类型必须一致。

 4.方法的参数列表必须一样,包括数量和数据类型,参数名称没有要求。

 5.用final修饰的方法不能够被重写(覆盖)

 验证方法重写是否正确的时候在方法的上面添加注解@Override   

例如:父类中的方法

public   void eat(String nameq){

System.out.println(name+"在吃东西");

}

子类中重写的方法

//方法的重写

@Override//用来检查方法是否重写正确

public void eat(String name){

System.out.println(getName()+"在吃老鼠");

}

知识补充:

final修饰符:  

final代表最终的,终止的。

使用final可以修饰类。方法 。属性、变量等。

  1. 被final修饰的类不可以被继承。例如String类就是被final修饰的类。

public final class String

extends Object

implements Serializable, Comparable<String>, CharSequence

 2.被final修饰的方法不可以被重写。

 3.被final修饰的属性或者变量不可以被修改,一般final和static一起来修饰常量

例如:

public static final double PI=3.14;//定义一个常量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值