java回顾第二章

懒懒张187 2021-04-11 11:55:01
继承
1.继承的概念:子类继承父类子类就自动拥有父类非私有的成员变量

2.继承的格式

/**
* 定义父类:
*/
public class Employee{
//定义属性
String name;
int age;
//定义方法
public void work(){
System.out.println("呕心沥血的工作!");
}
}


/*
定义工人类:工人是公司员工的一种,所以可以继承员工类
什么时候使用继承:我是你的一种的时候(is...a)

继承的格式:
public class 子类 extends 父类{}
子类:Worker
父类:Employee
继承的特点(重点):
子类继承父类,子类就会用用父类非私有的成员变量和成员方法
在子类中可以定义子类特有的成员

*/
public class Worker extends Employee{
//定义子类特有的打印姓名和年龄的方法
public void show(){
System.out.println(name+"\t"+age);
}
}
/*
定义监工类,是公司员工的一种,所以可以继承员工类
*/
public Classs Overseer extends Employee{
}

/*
测试继承:
测试子类继承父类之后,是否会自动拥有父类非私有的成员

继承的好处:
1.可以提高代码的复用性(重复使用)
2.继承使类与类之间产生了关系,是多态的前提

*/
public class DemoExtends {
public static void main(String[] args) {
//创建子类Worker 对象
Worker t = new Worker ();
//使用子类继承自父类的成员变量
t.name = "小白龙";
t.age = 18;
//使用子类继承自父类的成员方法
t.work();
//使用子类自己特有的成员
t.show();

//创建子类Overseer 对象
Overseer br = new Overseer ();
//使用子类继承自父类的成员变量
br.name = "仝大美女";
br.age = 18;
//使用子类继承自父类的成员方法
br.work();
}

}


注意:只能继承非私有的变量和方法

继承后的特点--------成员变量

public class Fu {
int a= 10;
}

public class Zi2 extends Fu {
int a = 100;
int b = 200;
}

/*
继承后的特点—成员变量:
1.子类有使用子类自己的成员变量
2.子类没有使用子类继承自父类的成员变量
3.子类和父类都没有,编译报错
*/
public class Demo01Variable {
public static void main(String[] args) {
//创建子类对象
Zi1 zi1 = new Zi1();
System.out.println(zi1.a);//10 子类继承自父类的
System.out.println(zi1.b);//20 使用子类自己的

//创建子类对象
Zi2 zi2 = new Zi2();
System.out.println(zi2.a);//100 使用子类自己的
System.out.println(zi2.b);//200 使用子类自己的
//System.out.println(zi2.c);//Cannot resolve symbol 'c' 子类父类都没有编译报错
}

}

注意:成员方法跟成员变量一样也是该情况

方法重写(Override)

public classFu{
public void show01(){
System,out,println("Fu类的show01方法");
}
}

/**
*方法重写:发生在两个类之间,在子类出现了和父类一模一样的方法,方法叫做重写(Override)
* 一模一样:
* 1,方法名一样
* 2,参数列表一样
* 3,返回值类型一样
* 4,修饰符一样(子类修饰的权限符要大于等于父类修饰的权限符)
* 注解:
* @override:检测是否为重写的方法
*
* 方法重载:发生在一个类当中,在一个类中方法名相同,参数列表不同(Overload)
*
*/
public class Zi extends Fu{
@Override
public viod show01(){
System.out.println("子类重写父类方法");
}

public void show01(int a){
System.out.println("子类自己特有的带参show01重载方法"+a);
}
}



public class DemoOverride{
public static void main(String[] args){
创建对象
Zi zi = new Zi();
zi.show01(); //调用的是子类重写的父类方法
zi.show01(10);
}
}

子类重写父类方法的注意事项:
1. 子类方法覆盖(重写)父类方法,必须要保证权限大于等于父类权限。
四大权限修饰符:
public:公共的
protected:受保护的
:默认的,不写就是默认的
private:私有的
2. 子类方法覆盖(重写)父类方法,返回值类型、函数名和参数列表都要一模一样。
3. 私有方法不能被重写(父类私有成员子类是不能继承的)


public class Fu {
protected void show01(){
System.out.println("Fu类的show01方法!");
}

void show02(){
System.out.println("Fu类的show02方法!");
}

public void show03(){
System.out.println("Fu类的show03方法!");
}

public void show04(String a){
System.out.println("Fu类的show04方法!");
}

private void show05(String a){
System.out.println("Fu类的show05方法!");
}
}

public class Zi extends Fu {
protected void show01(){
System.out.println("Zi类重写Fu类的show01方法!");
}

public void show02(){
System.out.println("Zi类重写Fu类的show02方法!");
}

//子类重写父类的方法,必须保证修饰符大于等于父类
/*void show03(){
System.out.println("Zi类重写Fu类的show03方法!");
}*/

//子类方法的参数和父类不一样,就不是方法重写
/*@Override
public void show04(){
System.out.println("Fu类的show04方法!");
}*/

//Method does not override method from its superclass 私有方法不能重写
//就相当于在子类中定义了一个自己特有的方法,恰好和父类名字是一样的
/*@Override
private void show05(String a){
System.out.println("Zi类的show05方法!");
}*/
}


继承后的特点-----构造方法

public class Fu{
int a = 10;
public Fu(){
System.out.println("Fu类的空参构造方法!"+a);
}
}

public class Zi extends Fu{
/*
Fu类的空参构造方法!10
Zi类的空参构造方法!10
在子类的构造方法中的第一行有一个默认的,super();作用是调用父类的空参构造方法
子类想要使用继承自父类的内容(成员变量、成员方法)必须先把父类加载到内存中,这样子类才可以使用
*/
public Zi(){
super();
System.out.println("Zi类的空参构造方法!"+a);
}
}

子父类内存图解

上图结果:Fu类的构造方法!10 Zi类的构造方法!1
















...全文
106 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
聪头 2021-04-12
  • 打赏
  • 举报
回复

50,504

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧