java三大特性之一----------继承

460 阅读4分钟

Java三大特性之一----------

继承 什么是继承? 

 1、继承是面向对象的三大特征之一. 

 2、也是实现软件复用的重要手段. 

3、 Java继承具有单继承的特点, 每个子类只有一个直接父类. 

4、所谓继承就是一个类**(子类)保留了另外一个类(父类)的一些(非私有)**属性或者方法 继承如何实现?

 Java的继承通过extends关键字实现 

 Java类继承的格式如下

修饰符 class SubClass extends SuperClass
{
    //类定义部分
}

下面我们通过一个具体的例子来看一下java的继承机制如何实现

首先我写了一个动物类

package parent;

public class Animal {
	public int age;
	public String name;
	public void eat() {
		System.out.println(name+"吃东西"+"它今年"+age+"岁了");
	}
	
}

然后写了一个子类(狗)

package child;

import parent.Animal;

public class Dog extends Animal{

}

可以看到我的子类什么也没有,但是他继承自父类Animal,父类的非私有属性和方法他都可以用

下面我写一个测试类来调用继承自父类的方法和属性

package test;

import child.Dog;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Dog dog = new Dog();
        
		dog.name="小花";
		dog.age=2;
		dog.eat();

	}

}

运行程序我把输出结果放在下面

小花吃东西它今年2岁了

上面的列子我们可以看到Dog的定义的中没有属性和方法的声明,但是我们在测试类中却可以调用它的一些属性和方法,原来我们在调用一个类的成员时,他首先会去看自己有没有,如果自己没有就会去看他的直接父类有没有,再去找间接父类有没有,直到找到为止,那如果找不到呢?找不到很简单,报错嘛,所以我们就看到了上面的运行结果

 这里有几点注意事项和说明,也是新手非常会犯错误的地方

1、Java的子类不能继承父类的构造器. 

2、Java不支持多继承,只能单继承,但是Java支持多级继承 

3、Java的类如果没有显示声明继承的父类,那么默认会继承java.lang.Object类,Object类是所有类的根类,也就是说java的所有类都直接或者间接的继承继承自这个类。 

上面的我们自是用子类调用父类的成员,有时候我们不仅仅是简单继承,我们需要对父类的方法进行修改,增加一些方法,增加一些属性,我们这里说的是增加没有全部重新写,体现java继承优点之一,增加了代码的复用性。关于java继承的其他好处,我们后面再统一列出 

下面我会修改Dog类,让他与父类有些不同 

package child;

import parent.Animal;

public class Dog extends Animal{
	public  boolean sex;
	@Override
	public void eat() {
		System.out.println(name+"吃骨头"+"它今年"+age+"岁了");
	}
	
	public  void printSex() {
		if(sex==true)
		System.out.println("男");
		else
		System.out.println("女");
	}

}


package test;

import child.Dog;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Dog dog = new Dog();
		dog.name="小花";
		dog.age=2;
		dog.eat();
		dog.sex=true;
		dog.printSex();

	}

}


输出结果:
小花吃骨头它今年2岁了
男

可以看到这个测试中我们同样调用eat方法,但输出和之前不一样,这是因为我在这里重写了父类的eat方法,当子类重写了方法之后,再调用这个方法时,他就会调用自己的方法,那么什么是重写呢?怎样重写呢?

这种子类包含与父类同名方法的现象称为方法重写(Override). 也被称为方法重写,也可以说子类覆盖了父类的方法

方法重写也要注意以下几点:

1、方法名相同 / 形参列表相同

2、子类方法返回值类型应比父类方法返回值类型小或相等. / 子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等.

3、子类方法的访问权限应比父类方法的访问权限大或相等.

继承的优点与缺点
A:继承的好处
a:提高了代码的复用性
b:提高了代码的维护性
c:让类与类之间产生了关系,是多态的前提
B:继承的弊端
a:类的耦合性增强了。