java继承详解加练习题(入门可看)

继承

继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法
继承的好处
提高了代码的复用性(多个类相同的成员可以收到同一个类中)
提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
继承弊端
继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性
继承中变量的访问特点
在子类方法中访问一个变量,采用的是就近原则。

  1. 子类局部范围找
  2. 子类成员范围找
  3. 父类成员范围找
  4. 如果都没有就报错(不考虑父亲的父亲…)

1.继承的特性
子类拥有父类非private的属性和方法;

子类可以拥有自己的属性和方法,即子类可以对父类进行扩展;

子类可以用自己的方式实现父类的方法;

在Java中只允许单继承,而不允许多重继承,也就是说一个子类只能有一个父类,但是Java中却允许多层继承,多层继承就是,例如类C继承类B,类B继承类A,所以按照关系就是类A是类B的父类,类B是类C的父类,这是Java继承区别于C++继承的一个特性;

提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。
2.java继承语句

class 父类 // 定义父类
{
    
    
    ...
}
class 子类 extends 父类 // 用extends关键字实现类的继承
{
    
    
    ...
}

3.实例

public class TestPersonStudentDemo {
    
    
    public static void main(String[] args) {
    
    
        Student s = new Student();
        // 访问Person类中的name属性
        s.name = "张三";
        // 访问Person类中的age属性
        s.age = 18;
        // 访问Student类中的school属性
        s.school = "哈佛大学";
        System.out.println("姓名:" + s.name + ",年龄:" + s.age + ",学校:" + s.school);
    }
}
class Person {
    
    
    String name;
    int age;
}
class Student extends Person {
    
    
    String school;
}

输出结果:
请添加图片描述

既然看懂了不如看一道来自educoder的练习题,增加一下知识,加深一下记忆
4.练习
编程要求
根据提示,在右侧编辑器Begin-End处补充代码:

声明一个Animal类,将属性name和age封装起来,提供对外的公共访问方法;

声明一个Cat类和Dog类,都继承Animal类,分别定义各自的voice方法和eat方法;

在main方法中分别实例化一个Cat对象和Dog对象,设置各自的属性并调用这两个方法,再打印出名字和年龄信息;

请看测试说明。
请添加图片描述

package case2;

public class extendsTest {
    
    
	public static void main(String args[]) {
    
    
		// 实例化一个Cat对象,设置属性name和age,调用voice()和eat()方法,再打印出名字和年龄信息
		/********* begin *********/
Cat cat = new Cat();
cat.name = "大花猫";
cat.age = "6岁";
cat.voice();
cat.eat();
System.out.println(cat.name+cat.age);
		/********* end *********/

		// 实例化一个Dog对象,设置属性name和age,调用voice()和eat()方法,再打印出名字和年龄信息
		/********* begin *********/
Dog dog=new Dog();
dog.name = "大黑狗";
dog.age = "8岁";
dog.voice();
dog.eat();
System.out.println(dog.name+dog.age);
		/********* end *********/

	}
}

class Animal {
    
    
	/********* begin *********/
 String name;
String age;
	/********* end *********/

}

class Cat extends Animal {
    
    
	// 定义Cat类的voice()和eat()方法
	/********* begin *********/
public void voice(){
    
    
    System.out.println(name+"喵喵叫");
}
public void eat(){
    
    
     System.out.println(name+"吃鱼");
} 
	/********* end *********/
}

class Dog extends Animal {
    
    
	// 定义Dog类的voice()和eat()方法
	/********* begin *********/
public void voice(){
    
    
    System.out.println(name+"汪汪叫");
}
public void eat(){
    
    
     System.out.println(name+"吃骨头");
}
	/********* end *********/
}

猜你喜欢

转载自blog.csdn.net/weixin_54107527/article/details/121457621