面向对象

本文深入探讨了面向对象编程的基石——封装、继承和多态,以及抽象类的概念。通过实例展示了如何在Java中实现这些特性,包括构造器、方法重写、接口和内部类的使用。此外,还强调了对象的创建、访问控制和数据安全的重要性,以提高代码的可维护性和复用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象

​ 利用 物以类聚、分类的思维模式。 对分类进行单独思考、再细化(面向过程->线性思维)。

​ 本质:以类的方式组织代码,以对象的组织封装数据

方法回顾和加深

​ 回顾的简单案例:

/**
     * 修饰符 返回值类型 方法名(...){
     *     //方法体
     *     return 返回值;
     * }
     */
    public int max(int i,int j){
        return i>j ? i : j;
    }

Student类

public class Student {

    public void show(){
        System.out.println("I am Studnet");
    }
}

实例化对象

对象类型 对象名 = 对象值

eg:

public static void main(String[] args) {
        //对象类型 对象名 = 对象值
        Student student = new Student();
    }

调用对象的相关方法

对象名.对象方法 ()

eg:

student.show();//I am Studnet

注:

​ 1.静态方法可使用非静态方法、但非静态方法不可调用静态方法

​ 【静态方法会直接生成、而非静态方法只有类实例化后才生成】

​ 2.基本类型做形参时为值传递、引用类型做形参时为引用传递

对象的创建

​ 对象只拥有 属性 和 方法

public class Student {

    //属性:字段
    String name;
    int age;

    //方法
    public void show(){
        System.out.println("I am Studnet");
    }
}

​ 创建对象和调用相关数据

​ 每一个new的对象都是单独的分配区间,即实例化后的对象是不同的

//main方法
    public static void main(String[] args) {
        Student Tom = new Student();
        Student Jerry = new Student();

        Tom.name="Tom";
        Jerry.name="Jerry";

        System.out.println(Tom.name); //Tom
        System.out.println(Jerry.name); //Jerry
    }

构造器

​ 用于初始化类

​ 注:

​ 构造器必须和类名相同

​ 没有返回值

所以当new实例化对象时,本质就是在调用构造器

Student类 (带构造器)

public class Student {

    //属性:字段
    String name;
    int age;

    //无参构造
    public Student(){

    }

    //有参构造、可对数据进行一定的加工处理
    public Student(String str,int num){
        this.name=str; //this.xxx  表示当前对象的xxx
        this.age = num;
    }
}

面向对象三大特性

封装

​ 高内聚、低耦合 =>类的内部数据操作由程序员万层,不允许外部干涉。仅暴露一小部分内容给外部使用

​ 通常采用 private 来表明私有

​ 这些内容 属性,get,set 应当都私有

eg: Student 封装样式

public class Student {

    //属性:字段
    private String name;
    private int age;

    private void show(){
        System.out.println("I am student");
    }

    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;
    }
}

作用:

​ 提高安全性,保护数据

​ 隐藏代码实现细节

​ 统一接口

​ 增加可维护性

继承

​ 对某一批类的抽象

​ 继承后,子类和父类之间 具有 xxx" is a "xxx 的关系

注:

​ Java 只有 单继承 !!!

语法形式:

class 子类 extends 父类

特点:

​ 子类可拥有父类的所有属性、方法

​ Object 类 是 所有类的父类

eg:

//父类 人
class Person{
    String name;

}

//子类 教师类
class  Teacher extends Person{

}


//子类 学生类
class Student extends Person{


    public void show(){
        System.out.println(this.name);
    }
}

其中 父类的相关内容 由 修饰符来表明 权限

​ public > protected > default > private [不被子类所继承]

super 关键字

​ super 通常用于 子类 调用 父类 内容。

注:

​ 构方都会默认super(),即调用父类的无参构造。

​ 其中 若要super()必须是第一行

class Student extends Person{
    private String name = "Z";

    public void show(String name){
        System.out.println(name); //name
        System.out.println(this.name); // Z
        System.out.println(super.name); //F
    }
}
方法重写

​ 子类继承父类后,对父类方法的重新设计

​ 注:

​ 方法名相同

​ 参数列表相同

​ 修饰符可以扩大

​ 异常可被缩小

//Test类
public class Test {

    //main方法
    public static void main(String[] args) {

        Person p =new Person();
        Student s = new Student();

        p.show();
        s.show();



    }


}

//父类 人
class Person{

    public void show(){
        System.out.println("Person");
    }

}


//子类 学生类
class Student extends Person{

    @Override //重写
    public void show(){
        System.out.println("Student");
    }
}
多态

​ 父类的引用指向子类

​ 用于动态编译、增加 可拓展性

语法形式:

父类 对象名 = new 子类();

注:

​ 父类指向子类时,不可调用子类独有的方法

​ 子类可调用本身或父类的方法

相关关键字

​ instanceof 判断是否为是否有继承关系,即是否相似。 以便于后续的类型转换

​ 子类转换父类,向上转型。

​ 父类强转子类,会丢失一些方法。向下转型。

抽象类

​ abstract 修饰符来修饰。

​ 修饰方法则方法->抽象方法,修饰类->抽象类

​ 注:

​ 抽象类,不可被new实例化对象,仅可被子类继承

​ 抽象方法,只有声明,没有方法实现,仅可被子类实现。

​ 子类继承抽象类后,必须实现相关抽象方法,否则需要声明为抽象类

//abstract 抽象类
abstract class AbstractClass{

    //约束方法规范 -> 交予子类实现
    public abstract void doSomething();
}


class AbstractImpl extends AbstractClass{

    //必须实现相关抽象方法
    @Override
    public void doSomething() {

    }
}

接口

​ 接口就是一组规范。

定义接口的形式

interface xxx{}

类 实现接口的形式:

class xxx implements xxx,xxx,xxx{}

注:

​ 接口中的所有定义 都默认带 public abstract

​ 接口可被多实现、即 一个类可以实现多个接口

​ 接口不可被实例化

interface InterfaceDemo{

    //接口中的所有定义 都默认带 public abstract
    void run();
    
    int max(int i,int j);
}

class InterfaceImpl implements InterfaceDemo{
    
    public void run(){
        System.out.println("run....");
    }

    @Override
    public int max(int i, int j) {
        return i>j?i:j;
    }
}

内部类

​ 在一个类的内部再定义一个类。

成员内部类

class Outer{

    private int id=1;
    public void outershow(){
        System.out.println("这是外部类的方法");
    }

    public class Inner{

        public void innershow(){
            System.out.println("这是内部类的方法");
        }

        /*
            内部类访问外部类的私有内容
         */
        public  void getOuterId(){
            System.out.println(id);
        }
    }
}

public class Test {

    //main方法
    public static void main(String[] args) {

        Outer outer = new Outer();

        //通过外部类来实例化内部类
        Outer.Inner inner = outer.new Inner();

        inner.innershow(); //这是内部类的方法

        inner.getOuterId(); // 1

    }

}

静态内部类

当static后 就不可访问外部内的相关内容

class Outer{

    private int id=1;
    public void outershow(){
        System.out.println("这是外部类的方法");
    }

    public static class Inner{

        public void innershow(){
            System.out.println("这是内部类的方法");
        }
    }
}

局部内部类

​ 一个java中,可以有多个class类,但仅有一个public class类

​ 该类既可以存于类中,又可以存在于方法这个,但作用域仅作用于当前。

匿名内部类

​ 实例化类时,可以不赋予一次。

​ 但该实例化类仅进行一次,不可进行后续的操作。

public class Test {

    //main方法
    public static void main(String[] args) {

        new NoName().show(); // 我可以没有名字

    }


}

class NoName{

    public void show(){
        System.out.println("我可以没有名字");
    }
}

内容概要:本文档详细介绍了利用Google Earth Engine (GEE) 平台对指定区域(位于中国广东省某地)进行遥感影像处理的一系列操作。首先,定义了研究区边界,并选取了 Landsat 8 卫星2023年8月至10月期间的数据,通过去云处理、归一化等预处理步骤确保数据质量。接着,基于预处理后的影像计算了地表温度(LST)、归一化植被指数(NDVI)、湿度指数(WET)、建筑指数(NDBSI)四个关键指标,并进行了主成分分析(PCA),提取出最重要的信息成分。为了进一步优化结果,还应用了像素二元模型对主成分分析的第一主成分进行了条件规范化处理,生成了最终的环境状态评估指数(RSEI)。最后,利用JRC全球表面水体数据集对水体区域进行了掩膜处理,保证了非水体区域的有效性。所有处理均在GEE平台上完成,并提供了可视化展示及结果导出功能。 适合人群:具备地理信息系统基础知识,对遥感影像处理有一定了解的研究人员或技术人员。 使用场景及目标:① 对特定区域的生态环境状况进行定量评估;② 为城市规划、环境保护等领域提供科学依据;③ 掌握GEE平台下遥感影像处理流程和技术方法。 其他说明:本案例不仅展示了如何使用GEE平台进行遥感影像处理,还涵盖了多种常用遥感指标的计算方法,如LST、NDVI等,对于从事相关领域的科研工作者具有较高的参考价值。此外,文中涉及的代码可以直接在GEE代码编辑器中运行,便于读者实践操作。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值