首页 > 编程语言 >java面向对象

java面向对象

时间:2023-02-18 23:22:05浏览次数:45  
标签:java People void class 面向对象 Student print public

java面向对象

以类的方式组织代码,以对象的组织(封装)程序。

  • 一个类里面只有方法和属性
  • 一个项目至多只有一个main方法

创建对象

  • 类是抽象的,需要进行实例化
public class Main {
    public static void main(String[] args) {
    //实例化一个对象:类 对象名 = new 构造器
    Student student = new Student();
    }
}

构造器

  • 一般写了有参构造后需添加一个无参构造器

类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下俩
个特点:

  1. 必须和类的名字相同
  2. 必须没有返回类型,也不能写void
public class Student {
    String name;
    //无参构造器
    public Student(){
        this.name = "Die Mongsheng";
    }
    //有参构造器,有参构造器在使用new调用对象时要在构造器中添加参数
    public Student(String name){
        this.name = name;
    }
}

public class Main {
    public static void main(String[] args) {
    //有参构造调用
    Student student = new Student("Die Mongsheng");
    }
}

封装

private关键字是封装的关键,被封装的属性不能在main方法中编辑(属性私有)

public class Student {
    private String name;
}

被封装的属性不能直接编辑,但可在类中编写get、set方法编辑

public class Student {
    private String name;

    //get方法来获取属性
    public String getName(){
        return this.name;
    }
    //set方法用来编辑属性
    public void setName(String name){
        this.name = name;
    }

}
public class Main {
    public static void main(String[] args) {
    Student student = new Student();
    student.setName("Die Mengsheng");
    System.out.println(student.getName());
    }
}

继承

  • java中只有单继承,没有多继承

使一个类获得另一个类的所有属性和方法,使用extends关键字(只有public修饰的属性可以直接继承,private修饰的不行,必须使用get、set)

public class Student extends People {
    
}

super

指向父类的属性,在创建对象时,默认先运行父类的构造器再运行子类的构造器,顺序不能更改

public class People {
    protected String name = "Die Mengsheng";
}
public class Student extends People {
    public void print(){
        System.out.println(super.name);
    }
}

方法的重写

  • 只有非静态方法可以重写
  • 只有public修饰的可以重写
  1. 方法名必须相同
  2. 参数列表列表必须相同
  3. 修饰符:子类可以扩大父类范围但不能缩小父类范围:public>protected>pefault>private
  4. 抛出的异常: 子类可以缩小父类范围,但不能扩大父类范围; classNotFoundException(小异常) --> Exception(大异常)
public class People {
    public void print(){
        System.out.println("People");
    }
}
public class Student extends People {
    public void print(){
        System.out.println("Student");
    }
}
public class Main {
    public static void main(String[] args) {
    //方法的调用只和左边定义的数据类型有关
    Student student = new Student();
    student.print();

    //父类的引用指向了子类
    People people = new Student();
    people.print();
    }
}
//结果均为"Student",因为子类重写了父类的方法

多态

子类能执行那些方法与对象左边的类型指向的引用有关,与右边关系不大

public class People {
    public static void print(){
        System.out.println("People");
    }
}
public class Student extends People {
    public static void print(){
        System.out.println("Student");
    }
}
public class Main {
    public static void main(String[] args) {
    //方法的调用只和左边定义的数据类型有关
    Student student = new Student();
    student.print();

    //父类的引用指向了子类
    People people = new Student();
    people.print();
    }
}
//结果为"Student","People",
//因为方法为静态方法,子类能执行那些方法与对象左边的类型指向的引用有关,与右边关系不大

instanceof

判断一个对象是否在某个类中

public class People {
    public static void print(){
        System.out.println("People");
    }
}
public class Student extends People {
    public static void print(){
        System.out.println("Student");
    }
}
public class Main {
    public static void main(String[] args) {
        Student student = new Student();
        //Object -> People -> Student
        System.out.println(student instanceof Student);//ture
        System.out.println(student instanceof People);//ture
        System.out.println(student instanceof Object);//ture
        System.out.println(student instanceof String);//false
    }
}

强制转化(对象)

  • 子转父自动转化,向上转型
  • 父转子强制转化,向下转型
public class People {
    
}
public class Student extends People {
    public void print(){
        System.out.println("Student");
    }
}
public class Main {
    public static void main(String[] args) {
        //子转父自动转化,父类的引用指向了子类
        //子类转父类可能会丢失一些自己本来的方法
        People people = new Student();
       
        people.print()//报错
        //父转子需强制转化
        ((Student)people).print()//输出"Student"
    }
}

抽象类

加入关键字abstract变抽象,抽象类不能new(实例化)

//在类处加入abstract变为抽象类
public abstract class Main {
    //在方法处加入abstract变为抽象方法(抽象方法只能在抽象类中使用),只有方法名没有具体方法内容
    public abstract void run();
}
  • 子类继承父类时,必须补齐父类的抽象方法的方法体,除非子类也为抽象类

接口

  • 将class替换为interface把类变为接口,接口中的方法默认为 public abstract
  • 接口定义的属性为常量

定义

//将class替换为interface把类变为接口
public interface Main {
    //接口中的方法默认为 public abstract,可不写 public abstract
    void run();
}

接口的实现

  • 通过implements实现接口的实现
  • 实现了接口的类需要重写接口的方法
  • 接口可以多继承
  • 接口不能实现实例化,他没有构造方法
public interface Main {
    void run();
}
public interface People {
     void print()
}
public class Student implements Main,People {
    @Override
    public void run() {
        System.out.println("run");
    }

    @Override
    public void print() {
        System.out.println("people");
    }
}

标签:java,People,void,class,面向对象,Student,print,public
From: https://www.cnblogs.com/zhao19811103/p/17133936.html

相关文章

  • 算法刷题-字符串排序-JAVA
    0x00引言为获取一个良好的算法思维,以及不再成为一个脚本小子,争取每天一道算法题,培养自己的逻辑思维,温顾各类型语言语法知识。题解只写自己理解的解法,其他解法不再增加。......
  • 算法刷题-字符串反转-JAVA
    0x00引言为获取一个良好的算法思维,以及不再成为一个脚本小子,争取每天一道算法题,培养自己的逻辑思维,温顾各类型语言语法知识。题解只写自己理解的解法,其他解法不再增加。......
  • 【Kotlin】Kotlin 与 Java 互操作 ① ( 变量可空性 | Kotlin 类型映射 | Kotlin 访问
    文章目录​​一、Kotlin变量可空性​​​​1、Java与Kotlin空值处理区别​​​​2、Java函数返回非空值和控制​​​​3、Kotlin函数调用Java函数​​​​4、平台类......
  • PAT-basic-1025 反转链表 java c++
    一、题目给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转。例如:给定 L 为1→2→3→4→5→6,K 为3,则输出应该为3→2→1→6→5→4;如果 K ......
  • PAT-basic-1024 科学计数法 java
    一、题目科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位,该......
  • 通过Java编写Flume拦截器
    首先要知道Flume中的Event是由Header+Body组成的。Flume支持在运行时对Event进行修改或丢弃,可以通过拦截器来实现。Flume里面的拦截器是实现了org.apache.flume.interc......
  • 算法刷题-字符串分隔-JAVA
    0x00引言为获取一个良好的算法思维,以及不再成为一个脚本小子,争取每天一道算法题,培养自己的逻辑思维,温顾各类型语言语法知识。题解只写自己理解的解法,其他解法不再增加。......
  • PAT-basic-1023 组个最小数 java
    一、题目给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,......
  • PAT-basic-1021 个位数统计 java
    一、题目给定一个 k 位整数 N=dk−1​10k−1+⋯+d1​101+d0​ (0≤di​≤9, i=0,⋯,k−1, dk−1​>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=1......
  • PAT-basic-1022 D进制的A+B java
    一、题目输入两个非负10进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数。输入格式:输入在一行中依次给出3个整数 A、B 和 D。输出格式:输出......