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(“快餐”);
}
}面试题:重载与重写的区别