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);
相关推荐
小羊没烦恼!7 小时前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里7 小时前
java中的继承和多态的区别
java
小羊没烦恼!7 小时前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕8 小时前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码8 小时前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖8 小时前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时8 小时前
01-06-A-JVM排查实战详解
java·jvm
伞伞悦读8 小时前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
vipxieliang9 小时前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
C语言小火车9 小时前
C/C++ 为什么需要编译器?
开发语言·c++