java面向对象

一.什么是面向对象

    面向对象编程的本质是:以类的方式组织代码,以对象的组织(封装)代码。

1.面向对象的三大特性:

  封装

  继承

  多态

 

二.super和this

    1.super关键字的用法有三种

      1.在子类的成员方法中访问父类的成员变量.

      2.在子类的成员方法中访问父类的成员方法.

      3.在子类的构造方法中访问父类的构造方法.

    2.

复制代码
 //this关键字用法有三种
    //1.在本类的成员方法中,访问本类的成员变量.
    //2.在本类的成员方法中,访问本类的成员方法.
    //3.在本类的构造方法中,访问本类的另一个构造方法.
    //在第三种方法中要注意:
    //A.super和this两种构造调用,不能同时使用.
    //this(...)调用也必须是构造方法的第一个语句,唯一一个,
    int num = 10;
    public static void main(String[] args) {
        ThisDemo thisDemo = new ThisDemo();
        thisDemo.showNum();
    }

    public void showNum(){
        int num = 20;
        System.out.println(num); //局部变量
        System.out.println(this.num); //类中的成员变量
    }

    public void methodA(){

    }

    public void methodB(){
        this.methodA(); //本类的成员方法调用本类的另一个成员方法
    }


    public ThisDemo(){
        this(12);//本类的无参构造方法 调用本类的有参构造方法
    }

    public ThisDemo(int a){

    }
复制代码

三.构造方法(构造器)

  1.构造方法

      和类名相同 无返回值。

  2.作用

      new的本质实在调用构造方法。

      初始化对象的值。

  3.注意点

      在定义有参构造后,无参构造必须显示定义

复制代码
public class Person {

    //构造器有以下俩个特点:
    //1.必须和类的名字相同
    //2. 必须没有返回类型,也不能写void

    //显示的定义构造器
    String name;

    //构造器作用:实例化初始值
    //使用new 关键字,本质上是在调用构造器
    public Person(){
        this.name="lc";

    }
    //有参构造,一旦定义了有参构造,无参构造就必须显示定义
    public Person(String name){
        this.name=name;
    }


}
复制代码

 

 四.封装

    1.封装的步骤

        使用privite修饰需要封装的成员变量。

        提供一个公开的方法设置或访问私有的属性:通过setXX()和getXX()方法。

    2.封装的意义与作用

        提高程序的安全性,保护数据。

        隐藏代码的实现细节。

        统一用户的调用接口。

        提高系统的可维护性。

        便于调用者的使用,

复制代码
public class Teacher {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    
复制代码
复制代码
public class Teacher {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
复制代码

 

五.super关键字

  1.super的使用

      访问父类中的属性。

      调用父类中的方法。

      调用父类中的构造器。

  2.super注意点

      super调用父类的构造方法,必须在构造方法中的第一个。

      super必须只能出现在子类的方法或者构造方法中。

      super和this不能同时调用构造方法。

  3.VS this

      代表的对象不同

        this:本身调用者这个对象,

        super:代表父类对象的应用,

      前提

        this:没有继承也可以使用。

        super:只能在继承条件下使用。

      构造方法

        this():本类的构造。

        super():父类的构造。

 

 

 六.多态

    即同一方法可以根据发送对象的不同而采用多种不同的行为方式

 

//父类的引用指向子类
        Student s1 = new Student();
        //父类型  可以指向子类 但是不能调用子类的独有方法
        Person s2 = new Student();
        Object s3 = new Student();

    多态存在的条件:

        有继承关系

        子类重写父类的方法

        父类引用指向子类的对象

 

    多态的注意事项

        多态是方法的多态,属性没有多态性

 

 七.方法重载和方法重写

    方法重载

          方法名一样,但参数列表不同。

 

    方法重写

          只存在于有继承关系的类里 子类来重写父类的方法。

 

          静态方法不能被重写

            1. 父类的静态方法不能被子类重写为非静态方法 //编译出错
            2. 父类的非静态方法不能被子类重写为静态方法;//编译出错
 
          私有方法不能被子类重写,

 

       重写的语法
        1. 方法名必须相同
        2. 参数列表必须相同
        3. 访问控制修饰符可以被扩大,但是不能被缩小: public protected default private
        4. 抛出异常类型的范围可以被缩小,但是不能被扩大ClassNotFoundException ---> Exception
        5. 返回类型可以相同,也可以不同,如果不同的话,子类重写后的方法返回类型必须是父类方法返回类型的子类型
          例如:父类方法的返回类型是Person,子类重写后的返回类可以是Person也可以是Person的子类型

 

 

八.抽象abstract

  1.语法

public abstract class Action{
public abstract void doSomething();
}
public void doSomething(){...}

  2.抽象类和抽象方法的关系

      抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类。
 
  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @   蠡烬  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示