java学习day1 面向对象编程

一、认识继承

认识继承:在现实世界中,任何事物的可以被视为对象,且处处存在继承。假设我们要写一个某公司人员管理系统:定义一个类为:people,作为各类工作人员的父类。该类中包含私有变量name、gender,以及对应的Getter与Setter方法。

接下来我们为各类工作人员定义相关类Teacher、Consultant,用关键字extends来继承父类people。其中的Teacher类、Consultant类不仅拥有自己的属性,还具备父类People的属性。

在学习的时候,看到了这一句话:子类就继承了父类的非私有成员(成员变量、成员方法),对着一句话确实难以理解,我在想子类不是还拥有了父类中用private修饰的属性吗?查阅了相关资料得知:

当您定义一个子类时,它会继承父类的所有成员变量和方法,包括私有的、保护的和公有的成员。这意味着子类会“拥有”父类的私有变量,只是不能直接访问它们。可以简单理解为:

  • 私有变量:仅在定义它的类(父类)内部可见,子类不能直接访问。
  • 保护变量(protected)公有变量(public):在子类中可以直接访问。

也就是说对于父类中用public修饰的成员变量/成员方法,子类对象可以通过teacher.setname("小红");这类方法直接调用。而用private修饰的,子类对象不可直接访问。teacher.name="小红";这就会报错。我们可以通过父类中一些公开的方法来修改/得到这些属性,比如哪些get/set方法。

正好下面我们来介绍一下java中的权限修饰符:

二、介绍权限修饰符

最好自己用代码去测试一下,加深自己的印象。不过在日常日常使用中,private与public使用较多,通常对一个类中变量用private修饰,然后对这些变量提供用public修饰的修改方法。

三、java继承特点

理解java为什么只支撑单继承:反证法:假设java支持多继承,这就会出现一个很复杂的问题,当不同的父类出现的成员函数名相同时,通过子类对象进行调用时,就会分不清到底是调用哪一个父类的成员函数。

四、java访问的就近原则

1.对于类变量与函数局部变量

函数执行时会优先访问函数的局部变量,因为局部变量更"近"。如果要访问类变量可以用关键字this

2.类变量/函数与父类中的变量/函数

创建子类对象,进行调用时,找最近的,那就是访问子类的变量/函数。如果要访问父类的变量/函数,可以用关键字super。

就近原则特点:子类没有找子类、子类没有找父类、父类没有就报错!

五、方法的重写

原则:格式不变,实现改变

子类重写父类方法,函数名和形参完全不变,只需改变内部实现,最好加上@Override注解,可以校验重写是否正确,同时可读性好。

相关规定:子类重写父类的方法,最好不要改变权限修饰符和返回参数类型,如果要改则权限修饰符范围要大和返回参数类型要小。私有方法、静态方法不能被重写。

重写场景:

子类认为父类的方法不好用,或者不满足自己的需求时,就可以用方法重写。

事例:Object类中的toString方法重写

直接打印对象,则会得到一串字符串类似于某种地址,是因为直接打印对象会默认打印出s.toString()。父类toString方法实现如下:

我们在子类中进行重写

再次执行上述代码,得到结果如下:

六、子类构造器

子类的全部构造器,都会先调用父类的构造器,再执行自己。(理解:我们都知道子类会继承父类的属性,构造器基本上是用来属性初始化的,所以子类的构造器在执行时,会默认先执行父类的构造器,先把父类的属性继承了,在来初始化自身的属性)

子类构造器是如何实现调用父类构造器的: 默认情况下,子类全部构造器的第一行代码都是 super() (写不写都有) ,它会调用父类的无参数构造器。 如果父类没有无参数构造器,则我们必须在子类构造器的第一行手写super(….),指定去调用父类的有参数构造器。

应用场景:我们在子类的构造器中,通常无法直接初始化父类中所含有的属性,这时候我们就可以在子类构造器中利用super关键字调用父类的有参构造器来实现初始化。

以下代码我们定义了Peopel类,子类为Student类,子类有参构造器无法通过this关键字来对父类中的属性进行赋值,这时我们可以采用super来调用父类构造器,从而使用了子类构造器对父类属性的赋值。

补充知识:this(…)调用兄弟构造器

在该类的无参构造器中通过this调用该类的有参构造器,会发现当创建对象时,该对象属性也完成了赋值。

输出结果如下:

更恰当的例子如下,由于每次创建学生对象都要输入身份为“学生”,很繁琐,那么就可以创建一个不含身份的构造器,在其内部用this调用构造器,直接定义身份为学生。

今天的学习就到这里,希望大佬路过多多指点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值