Java基础之继承

本文详细介绍了Java中的继承特性,包括子类如何继承父类的属性和方法,以及构造方法的调用顺序。通过实例展示了多层继承和方法重写(Override),强调了重写的目的和规则。此外,还探讨了方法重载(Overload)的概念,给出了重载的例子和面试中常问的重载与重写区别。内容深入浅出,适合初学者掌握Java面向对象编程的核心概念。
摘要由CSDN通过智能技术生成

1、继承

JAVA 有三大特性:封装、继承、多态

Java中的继承是类与类之间的关系,继承至少有两个类

语法格式:

class B extends A{

}

B是A的子类即B继承了A, A是B的父类(也叫基类或超类)

入门案例:

package com.yu.homework;

class Instrument{
    String name;
	public void play() {}
}
class Wind extends Instrument{
	@Override
	public void play() {
		System.out.println("弹奏Wind");
	}
}
class Brass extends Instrument{
	@Override
	public void play() {
		System.out.println("弹奏Brass");
	}
}
public class Demo1 {
	public static void main(String[] args) {
        //继承之后可以调用父类的非私有的属性和方法
		Wind wind = new Wind();
        win.name = "小余";
		wind.play();
        //java可以实现多层继承,但是不支持多继承(一个类不可以有两个父类)
		Brass brass = new Brass();
		brass.play();
	}
}

继承就是将父类的属性和方法拿到子类来用

子类可以继承父类所有的非私有的属性和方法

构造方法:创建子类对象时,先执行父类的构造方法,然后再执行子类的构造方法,父类的构造方法应与子类的构造方法的形式保持一致

package com.yu.homework;

class People{
	 private double height;
	 private double weight;
	 String name;
	 //有参构造方法
	 public People(double height, double weight) {		
		this.height = height;
		this.weight = weight;
	}
	 //无参构造方法
	public People() {
	}
	public double getHeight() {
		return height;
	}
	public void setHeight(double height) {
		this.height = height;
	}
	public double getWeight() {
		return weight;
	}
	public void setWeight(double weight) {
		this.weight = weight;
	}
	private void averageHeight() {
		 System.out.println("我是私有的方法");
	 }
	 public void averageWeight() {
		 System.out.println("我是公有的方法");
		 averageHeight();
	 }
}
class ChinaPeople extends People{
	
}

public class Demo2 {
	public static void main(String[] args) {
		ChinaPeople chinaPeople = new ChinaPeople();
		//可以继承父类公有的成员方法
		chinaPeople.averageWeight();
		//可以继承子类公有的成员变量
		chinaPeople.name = "小花";
		//无法调用父类私有的成员方法,可以将私有的成员方法,封装到公有的成员方法中再调用封装后的成员方法,
		//间接调用父类私有的成员方法
		//The method averageHeight() from the type People is not visible
		//chinaPeople.averageHeight();
		
		//无法调用父类私有的成员变量,可以通过getter and setter方法进行赋值和取值
		//chinaPeople.height = 15.5;
		
	}
}

总结:

​ 至少用到两个类。使用关键字extends

​ 子类可以使用父类所有的非私有的成员变量和成员方法

2、关于父子类的内存分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bv4q36Bj-1659414156459)(D:\LearnNotes\千峰Java学习\我的笔记\image\2.png)]

3、重写(override)

override

重写的目的:当父类的非私有成员方法无法满足子类的需求时,需要在子类中重写该方法。

重写的要求:

1.必须有继承关系
2.父类的方法必须为非私有化的
3.在子类中重写时,除了方法体不一样外,其他的都是一样的
4.必须在子类中去重写
package com.yu.homework;

class Monkey{
	public Monkey() {}
	public Monkey(String str) {
		System.out.println(str);
	}
	public void speak() {	
		System.out.println("咿咿呀呀。。。。。");
	}
}
class People1 extends Monkey{
	@Override //重写父类的speak方法
	public void speak() {
		// TODO Auto-generated method stub
		System.out.println("小样啊");
	}
}
public class Demo3 {
	public static void main(String[] args) {
		Monkey monkey = new Monkey();
		monkey.speak();
		People1 people1 = new People1();
		people1.speak();
	}
}

4、重载(overload)

在Java中的同一个类中,方法名一样,但是参数类型不一样,这就叫重载

1.方法的重载必须在同一个类中
2.方法的名字必须一致
3.方法的参数类型必须不一样
4.方法的返回值可以不一样
5.无参构造和有参构造也是一种重载
 package com.yu.homework;
/**
 * overload:重载,只和方法名和参数有关
 * 			必须:方法名一致,参数列表不同
 * 
 * */
class Teacher {
	String name;
	int age;
	//无参构造方法 和 有参构造方法是一种重载
	public Teacher(String name, int age) {
		this.name = name;
		this.age = age;
	}
	public Teacher() {
		
	}
	//普通的成员方法,实现重载
	public void eat() {
		System.out.println("吃小吃");
	}
	public String eat(String food) {
		System.out.println("吃" + food);
		return food;
	}	
}
public class Demo4 {
	public static void main(String[] args) {
		Teacher teacher = new Teacher();
		teacher.name = "heihei";
		teacher.eat();
		teacher.eat("快餐");
	}
}

面试题:重载与重写的区别

ass Demo4 {

public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.name = “heihei”;
teacher.eat();
teacher.eat(“快餐”);
}
}


面试题:重载与重写的区别
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小余学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值