面向对象编程

面向对象编程

修饰符

package OOP;

public class Demo1 {
    public static void main(String[] args) {

    }
    public void sayHello(){
        System.out.println("hello");
    }
    public int max(int a,int b){
        return a>b ? a:b; // return结束方法,返回结果  break 结束循环 continue 结束本次循环
    }
}

方法调用

非静态方法

静态方法

package OOP;

public class Demo2 {
    public static void main(String[] args) {

    }
    //static 修饰的方法和类一起加载
    public static void a(){
        b();
    }
    //类实例化之后才存在
    public  void b(){

    }
}

值传递与引用传递

值传递:

package OOP;
//值传递
public class Demo3 {
    public static void main(String[] args) {
        int a=1;
        System.out.println(a); //1
        Demo3.Change(a);
        System.out.println(a); //1
    }
    //返回值为空
    public static void Change(int a){
        a=10;
    }
}

引用传递:

package OOP;
//引用传递:对象 本质为值传递
public class Demo4 {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.name); //null
        Demo4.Change(person);
        System.out.println(person.name);
    }
    public static void Change(Person person){
        //person是一个对象,指向具体的类
        person.name ="xiaowei"; //xiaowei
    }
}
//定义了一个Person类,有一个属性:name
class Person{
    String name;
}

类与对象的关系

以类的方式封装代码,以对象的方式封装数据

package OOP.demo;

public class Application {
    public static void main(String[] args) {
        //类抽象的 需要实例化
        //类实例化后会返回自己的对象
        //student对象就是Student类的具体实例
        Student xiaoming = new Student();
        Student xh = new Student();
        xiaoming.name="xiaoming";
        xiaoming.age=3;
        xh.name="xh";
        xh.age=3;
        System.out.println(xiaoming.name);
        System.out.println(xiaoming.age);
        System.out.println(xh.name);
        System.out.println(xh.age);

    }
}

package OOP.demo;

public class Application {
    public static void main(String[] args) {
        //类抽象的 需要实例化
        //类实例化后会返回自己的对象
        //student对象就是Student类的具体实例
        Student xiaoming = new Student();
        Student xh = new Student();
        xiaoming.name="xiaoming";
        xiaoming.age=3;
        xh.name="xh";
        xh.age=3;
        System.out.println(xiaoming.name);
        System.out.println(xiaoming.age);
        System.out.println(xh.name);
        System.out.println(xh.age);

    }
}

构造器

一个类即使什么都不写,也会存在一个方法,即为默认方法

构造器一般用于初始化值

重载(上面)

使用new关键字 必须要有构造器

通过new关键字调构造方法

一旦定义了有参构造,无参构造就必须显性定义(未显性定义无参的错误示例)

alt+insert 生成构造器(重载) 再选construct 直接点ok生成有参 点 none生成无参

一些小结:

内存分析:

一些总结:

封装
封装主要针对属性

提高数据的安全性,保护数据

隐藏代码的实现细节

统一接口

系统可维护增加

package OOP.cage;

public class Student2 {
    private String name;  //private 私有
    private char sex;
    private int age;
    //提供一些可供操作这些属性的方法
    //提供一些 public(只有public才可被访问)的get、set方法
    //alt + insert 自动生成get set方法(选择geter and seter)


    public String getName() {//|获得数据
        return name;
    }

    public void setName(String name) {//设置数据
        this.name = name;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {//可加条件判断年龄是否合法
        if (age > 0 && age < 120) {
            this.age = age;
        } else {
            this.age = 0;
        }
    }
}

package OOP.cage;

public class Application {
    public static void main(String[] args) {
        Student2 s1 =new Student2();
        s1.setName("xiaowei");
        s1.setAge(999); //不合法的
        System.out.println(s1.getAge());//0
        System.out.println(s1.getName());//xiaowei
    }
}

继承

java中所有的类都继承object类

父类被继承的属性为public可直接调用
子类继承了父类就会拥有父类的所有方法

super详解:(注意中间test方法的三种name输出)

(注意test方法中的三种print输出方法)

tips:私有修饰 无法被继承

默认调用父类构造器,必须要在子类构造器第一行

重写

重写都是方法的重写,和属性无关
静态方法:

非静态方法;

重写关键字只能是public

多态


子类没有重写父类调用父类,子类重写父类调用子类
重写:

调用父类错误:


一些总结:

Instanceof 和类型转换
instanceof: 用于判断数据是什么类型

x instanceof y:x与y存在父子间关系则为true,否则为false

类型转换:

子类转化为父类可能会丢失一些子类的方法

static 关键字详解
静态变量可以通过类直接调用

静态方法与非静态方法:
静态方法类内可直接调用,非静态方法需要new后才可调用

静态代码块与匿名代码块:

静态导入包:

final修饰符修饰的类无法被继承(断子绝孙)

抽象类

除非他的子类也是抽象方法

类只可以单继承 不可以多继承 但是接口可以多继承

抽象类不可以new 只能靠子类去实现

抽象类中可以写普通的方法,抽象方法必须写在抽象类中

接口

接口定义关键字为 interface 其中定义的方法默认为 public abstract

eg: public abstract void run(String name) == void run(String name)

接口都需要实现类

上图实现了UserService接口的所有类

多继承 可以继承多个接口

内部类

posted @ 2021-02-19 17:42  小伟99  阅读(55)  评论(0)    收藏  举报