【JAVA杂货铺】一文带你走进面向对象编程 继承 重载 重写 期末复习系列 (中4)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文


私有成员变量在继承中的使用

**注意:**私有的成员 可以被继承 但是不能访问.

若想访问,我们可以****通过 get和 set方法进行访问

代码如下:

package Inherit;

class Animal{
	private String name;
	public int age;
	
	public void eat() {
		System.out.println(name + "正在吃饭!");
	}
	

	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
}


class Dog extends Animal{
	public void barks() {
		System.out.println(getName() + "汪汪叫!"+"年龄"+ age);
	}


	
}

class Cat extends Animal{
	public void CatchMouse() {
		System.out.println(getName() + "正在抓老鼠");
	}
}

public class Test{
	public static void main(String[] args) {
		Dog dog = new Dog();
		//属性继承
		dog.setName("旺财");
		dog.age = 10;
		dog.barks();
		//方法继承
		dog.eat();
		
		
		Cat cat = new Cat();
		//属性继承
		cat.setName("喵喵");
		cat.age = 10;
		cat.CatchMouse();
		//方法继承
		cat.eat();
	}
}


当子类和父类变量不重名时:


package Inherit;

/**
 * 子类和父类不存在同名变量时
 */

class Base{
	int a;
	int b;
}
public class Derived extends Base{

	int c;
	public void method(){
		
		a = 10;//来自父类
		b = 20;//来自父类
		c = 30;
		
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
	}
	
	public static void main(String[] args) {
		Derived derived = new Derived();
		derived.method();
	}
}

控制台运行结果:

当子类和父类重名时:

package Inherit;

/**
 * 子类和父类存在同名变量时
 */

class Base{
	int a;
	int b;
	
	public void methodA() {
		System.out.println("Base 中的methodA()");
	}
}

public class Derived extends Base{
	int a = 60;// 与父类成员 a 同名,类型相同 
	
	char b = 'o';//与父类成员 b 同名,不同类
	
	int c;
	
	public void methodB() {
		System.out.println("Derived 中的 methodB()方法");
	}
	
	public void methodC() {
		methodB();//访问子类自己的methodB()
        methodA();//访问父类继承的methodA()
//        methodD();//编译失败,在整个继承过程中没有发现方法
	}
	
	public void method(){
		
//		a = 10;//来自父类
		b = 20;//来自父类
		c = 30;
		
		System.out.println(super.a);
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
	}
	
	public static void main(String[] args) {
		Derived derived = new Derived();
		derived.method();

父类与子类重合,优先访问子类

控制台运行结果:


📝总结:

继承的含义:

抽取共性,通过子类继承(extends)父类,达到代码复用


toString方法的作用:

在JAVA中,toString()方法是Object类中的一个方法,它的作用返回一个表示对象的字符串。当我们需要将一个对象转换为字符串时,可以使用toString()方法

如果我们没有重写该方法,则默认返回对象的类名和哈希码。

下面是一个toString()方法的代码案例:

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public static void main(String[] args) {
        Person person = new Person("Tom", 20);
        System.out.println(person.toString());
    }
}

在上面的代码中,我们定义了一个Person类,并重写了toString()方法,返回了一个包含name和age属性的字符串。在main方法中,我们创建了一个Person对象,并使用toString()方法将其转换为字符串并输出。


重写和重载的区别

JAVA官方语法文档链接🔗👉:The Java® Language Specification

通过ctrl + F 找到 overload重载

重写和重载都是面向对象程序设计中的概念,它们的作用都是实现多态。但是它们的含义和实现方式是不同的

重载(Overload):指的是在同一个类内部或者父子类之间,方法名相同,但是参数列表不同(参数类型、参数个数、参数顺序),返回值类型可以是相同的也可以不同的。这样的方法就叫做重载方法。

编译器根据调用时传递的不同参数,来确定调用的具体方法。

重写(Override):是指子类重写父类方法,方法名、参数列表、返回值类型与父类相同。这时候子类中的方法会覆盖掉父类中的方法,实现多态

下面是一些示例代码:

重载:

public class OverloadExample {
    public int add(int a, int b) {
        return a + b;
    }

    public int add(int a, int b, int c) {
        return a + b + c;
    }
}

重写:

总结

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。

上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料

有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-OafbILeo-1713436912256)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值