java中面向对象编程2

前言:对于类的继承,多态,接口等进行总结,可以使得代码的实现更加多样化,更加方便,不用每一个都去重写一遍

1.对于接口,可以说是继承的一种,只不过更加特殊,因为他要对接口里面的抽象方法进行重写,用实现这个词更加合适,然后需要用到关键词implements.

依旧以学生类为例:

java 复制代码
public interface IStudent {
 public static final String name = "XX";
 public void study();//抽象方法
}
public class Student implements IStudent{
 private int score;
 public Student(int score){
 this.score = score;
 }
 public Student(){
 }
 public void setScore(int score){
 this.score = score;
 }
 public int getScore(){
 return score;
 }
 //实现接口中的抽象方法
 public void study(){
 System.out.println(name+"正在学习!");
 }
}

2.关于1.中的static,final.

1.static表示多个变量,可以同时共用同一个变量,并且都可以修改他,并且该值也是共享的。

2.final表示固定这个量,便不可以再修改

3.对于继承,子类继承父类,需要用到关键词extends,格式为,子类 extends 父类

java 复制代码
public class Student implements IStudent{
 private int score;
 public Student(int score){
 this.score = score;
 }
 public Student(){
 }
 public void setScore(int score){
 this.score = score;
 }
 public int getScore(){
 return score;
 }
 //实现接口中的抽象方法
 public void study(){
 System.out.println(name+"正在学习!");
 }
}
public class UNStudent extends Student{
 //在子类的构造方法中一定要调用一次父类的构造方法
 //父类的无参构造方法会被默认调用
 public void print(){
 System.out.println("学分:"+getScore());
 }
 
 public void study(){

 System.out.println("子类重写父类中的方法");
 }
}

1.继承可以继承父类的所有属性和方法,但是构造函数不会被继承,继承的目的是为了重写父类中的抽象方法,便于后续的优化使用,并且可以使方法功能更加多样,更符合要求

2.如果父类自定义了构造方法,那么子类的构造方法必须调用父类的构造方法,使用关键词super,其他函数也是如此,要先调用其对应的父类的方法

java 复制代码
public void study(){
 super.study();
 System.out.println("子类重写父类中的方法");
 }

注意:方法重写的要求:1.有继承关系的两个类之间

2.返回值类型,方法名,参数类型(个数,顺序)完全一样

3.关于自动转型和强制转型,自动是子类转父类,强转是父类转子类

1.自动转型

java 复制代码
UNStudent un = new Student();
un.study();

这个un对像是父类对象,并且在调用函数时,优先看这个函数是否在父类被定义,其次实现的功能是子类的

2.强转

java 复制代码
UNStudent stu = (UNStudent)un;
stu.print();

这个stu对象是子类对象,并且该转型的前提是,这个un本身是自动转型的产物

4.多态,在调用方法时,可以处理给他父类对象,也可是子类对象,这里便是自动转型的运用。

java 复制代码
Teacher t = new Teacher();
t.teach(un);
相关推荐
OH_TPC7 分钟前
HarmonyOS APP开发---“滤镜大师“图像处理App,需要用到这个库
java·图像处理·华为·harmonyos·鸿蒙
leoZ2311 小时前
AI 辅助开发的五道坎
开发语言·人工智能·视觉检测·bert·php·超分辨率重建·openvino
imaol11 小时前
链表 -- 环链表
java·前端·链表
程序员老陆2 小时前
Qt的QThread::usleep和FFmpeg的libavutil模块的av_usleep哪个精度高一些?
开发语言·qt·ffmpeg·音视频
imaol12 小时前
链表 -- 双向链表
java·前端·链表
2601_963869952 小时前
【计算机毕业设计】基于Java的相框定制系统的设计与实现
java·开发语言·课程设计
名字还没想好☜3 小时前
Go 的 unsafe.Pointer 实战:零拷贝 []byte↔string 转换与三条铁律
开发语言·后端·golang·go·unsafe
于烛3 小时前
为什么hasNext() 对只有一个元素的集合返回 true?90%初学者都有的疑问
java
wuminyu3 小时前
JVM利用io_uring优化堆外内存性能原理剖析
java·linux·c语言·jvm·c++
imaol14 小时前
数据结构---队列
java·数据结构·算法