Java基础11 面向对象~继承,1307页字节跳动Java面试全套真题解析火了

  • 学生类

*/

public class Student extends Person{

//学号

private String no;

public String getNo() {

return no;

}

public void setNo(String no) {

this.no = no;

}

public Student(){

}

public Student(String no,String name,int age) {

this.no = no;

//调用了父类的方法

this.setName(name);

this.setAge(age);

}

public void study(){

//调用了父类的方法

System.out.printf("%d岁的学号%s的%s同学在学习Java",this.getAge(),this.getName(),no);

}

}

public class StudentDemo {

public static void main(String[] args) {

Student stu = new Student(“001”,“张三”,20);

//调用父类方法

stu.eat();

//调用自身方法

stu.study();

}

}

在这里插入图片描述

Java中的继承的特性

  • 传递性,父类的成员可以传递给子类,以及子类的子类

  • 单根性,子类只能有一个父类

super关键字

======================================================================

super代表父类对象

作用有:

  1. 调用父类的属性

super.属性

  1. 调用父类的方法

super.方法(…)

  1. 调用父类的构造方法

super(参数);

super和this的区别:

  1. this代表当前类的对象,super代表父类的对象

  2. this可以调用当前类的属性和方法(包括自身特有和父类的)

super只能调用父类的属性和方法

  1. this可以调用自身的构造方法,super可以调用父类的构造方法

super调用父类的构造方法:

给父类添加构造方法:

public Person() {

System.out.println(“这是Person无参的构造方法”);

}

public Person(String name, int age) {

this.name = name;

this.age = age;

System.out.println(“这是Person带参的构造方法”);

}

给子类添加构造方法:

public Student(){

System.out.println(“这是Student无参的构造方法”);

}

public Student(String no,String name,int age) {

//调用了父类的构造方法

super(name,age);

this.no = no;

System.out.println(“这是Student带参的构造方法”);

}

调用子类:

Student stu = new Student();

Student stu1 = new Student(“001”,“张三”,20);

在这里插入图片描述

注意:

  1. 子类如果不写super,系统会默认调用父类无参的构造方法

  2. 调用父类有参构造方法时,子类必须使用super显式的调用父类的构造方法

  3. super()必须出现在子类构造方法的第一行

  4. 构造方法的调用,总是先调用父类的,再调用子类的

方法重写

=======================================

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

===========================

什么是方法重写?

子类中的方法可以覆盖父类中的方法

方法重写的特点:

  1. 方法在子类和父类中

  2. 方法名相同

  3. 参数、返回值都相同

  4. 子类方法的访问修饰符不能比父类更严格

学生类重写父类的eat方法

//重写父类的方法

public void eat(){

System.out.printf("%d的%s同学在吃KFC\n",this.getAge(),this.getName());

}

Student stu1 = new Student(“001”,“张三”,20);

stu1.eat();

在这里插入图片描述

Object类

=====================================================================

Object类是Java中一切类的父类

Object类的常用方法:

  • equals 比较是否相等

  • hashCode 返回哈希代码

  • getClass 返回对象的类型信息

  • toString 返回对象的字符串信息

==和equals的区别

==对于基本类型,比较的是值;

对于引用类型,比较的是内存地址。

Object类的equals比较的也是对象的地址,因为源码中是用==实现的

public boolean equals(Object obj) {

return (this == obj);

}

对于String类型来说,equals比较的是字符内容,因为String类重写了Object类的equals方法

public boolean equals(Object anObject) {

if (this == anObject) {

return true;

}

if (anObject instanceof String) {

String anotherString = (String)anObject;

int n = value.length;

if (n == anotherString.value.length) {

char v1[] = value;

char v2[] = anotherString.value;

int i = 0;

while (n-- != 0) {

if (v1[i] != v2[i])

return false;

i++;

}

return true;

}

}

return false;

}

思考下面代码的执行结果:

String s1 = “abcd”;

String s2 = “abcd”;

String s3 = new String(“abcd”);

System.out.println(s1==s2);

System.out.println(s2==s3);

System.out.println(s2.equals(s3));

在这里插入图片描述

对于"abcd"这种常量值,分配在常量池中的;字符串常量是可以反复使用的。

第1、2行代码的“abcd”是同一个常量。

第3行代码使用new,会在堆中创建新的对象。

第4行代码,s1和s2是同一个对象,结果为true

第5行代码,s2和s3不是同一个对象,结果为false

第6行代码,equals比较的是字符串的值,结果为true

final关键字

======================================================================

用于修饰类、变量、方法

  1. 被final修饰的类,不能被继承

final class A{}

class B exends A{} //错误

  1. 被final修饰的变量变成常量,不能修改值

final int num = 2000;

num++; //错误

  1. 被final修饰的方法,不能重写

class A{

public final void test(){}

}

class B extends A{

public void test(){} //错误

}

抽象方法和抽象类

======================================================================

在实际开发过程中,有时候我们需要把某些方法的具体实现,推迟到子类中实现。

抽象方法的意义在于:

  1. 可以规范方法的定义(返回值类型、方法名、参数)

  2. 具体实现由子类完成

抽象方法:

public abstract 返回值 方法名(类型 参数);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值