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);
相关推荐
1024奇点5 小时前
【仓颉语言入门 · 第二篇 第 22 课】
开发语言·ide·开源
Warren2Lynch6 小时前
C4 模型详解:利用 Visual Paradigm 可视化软件架构的综合指南
开发语言·uml
天河归来6 小时前
第三方接口不稳定,如何让核心任务继续完成
java·大数据
Knight_AL7 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
FRing037 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
by209998 小时前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
砚底藏山河8 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
IT召唤狮8 小时前
开源企业级零信任项目Pangolin,零信任能挡住PHP核弹漏洞吗?
开发语言·开源·php
知已难寻8 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
Rover Ramble8 小时前
C++ 用互斥锁实现读写锁
开发语言·c++