【Java-----继承详解】

本文详细介绍了面向对象编程中的继承概念,包括其特点、优缺点以及在Java中的实现方式。通过实例展示了如何创建子类并重写父类方法。同时,讨论了继承中成员访问、super关键字的使用、构造方法的调用规则以及静态方法的隐藏现象。内容涵盖了继承的基本原理和实际编程中的应用技巧。

一  继承

继承是面向对象的三大特征之一,继承就是子类继承父类的特征和行为,使得子类对象具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

二  继承的特点

优点:继承可以降低代码编写的冗余度,提高编程的效率,通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量。

缺点:继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性。

三  继承的编写

在Java中通过extends关键字来声明一个类是从另一个类继承而来的,下面举一个具体的实例:

//定义一个动物类
public class Animal {
	String name;
	int age;
	public Animal() {
		
	}
	public Animal(String name,int age) {
		this.name=name;
		this.age=age;
	}
	public void setName(String name) {
		this.name=name;
	}
	public String getName() {
		return name;
	}
	public void setAge(int age) {
		this.age=age;
	}
	public int getAge() {
		return age;
	}
}


//定义一个猫类继承动物类
public class Cat extends Animal {
	public Cat() {
		
	}
	public Cat(String name,int age) {
		this.name=name;
		this.age=age;
	}
	public void catchMouse() {
		System.out.println("会抓老鼠");
	}
}

四  继承中成员的访问特点

在子类方法中访问一个变量时:

  • 首先在子类的局部范围内找,也就是访问该变量的方法中找
  • 其次在子类的成员变量范围内找
  • 最后在父类的成员变量范围内找

五  super关键字

使用super关键字可以调用父类中的成员变量,父类中被重写的方法或者父类的构造方法。

方法重写

当一个子类中一个实例方法具有与其父类中的一个实例方法相同的签名(指名称、参数个数和类

型)和返回值时,称子类中的方法“重写”了父类的方法。

public class Animal{
    public void eat() {
		System.out.println("动物吃东西");
	}
}
public class Dog extends Animal{
    public void eat() {
		System.out.println("狗吃骨头");
	}
}

方法重写注意事项:

  • 私有方法不能被重写(父类私有成员子类是不能继承的)
  • 重写时,子类方法访问权限不能更低(public>默认>私有)
  • 重写时,在父类中是静态方法,子类中也要是静态方法,父类中是实例方法,子类中也要是实例方法

继承中构造方法的访问特点

子类中所有的构造方法默认都会访问父类中无参的构造方法,因为:

  • 子类会继承父类中的数据,可能还会使用父类的数据,所以,子类初始化之前,一定要先完成父类数据的初始化
  • 每一个子类构造方法的第一条语句默认都是:super()
//父类
public class Father {
	public Father() {
		System.out.println("父类无参构造方法");
	}
	public Father(int age) {
		System.out.println("父类带参构造方法");
	}
}


//子类
public class Son extends Father {
	public Son() {
		
		System.out.println("子类无参构造方法");
	}
	public Son(int age) {
		System.out.println("子类带参构造方法");
	}
}


//测试类
public class Demo {
	public static void main(String[] args) {
		Son s1=new Son();
		Son s2=new Son(18);
	}
}

 继承中隐藏父类方法

static修饰的方法是静态绑定(在编译时期,类和方法的关系就确定了),比如下面例子,子类“重写”了父类的静态方法,在编译时期,重写的静态方法已经和子类绑定在一起了,所以产生了“复写”的效果,准确来说子类静态方法隐藏了父类的静态方法。但是调用f.show()时,仍旧调用的是父类的静态方法,这是同样的道理,对于静态方法,在编译时期就静态绑定了类和方法的关系,不存在多态性,所以静态方法的调用看等号左边的类。

//父类
public class Father {
	
	public static void show() {
		System.out.println("我是父类方法");
	}
}

//子类
public class Son extends Father {
	
	public static void show() {
		System.out.println("我是子类方法");
	}
}

//测试类
public class Demo {
	public static void main(String[] args) {
		Son.show();
		Father f=new Son();
		f.show();
		Father.show();
		
	}
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值