015 面向对象与类

面向对象与类

面向对象编程(OOP)

object-oriented programming
以类的方式组织代码,以对象方式封装数据
一个项目中建议一个main方法

类:属性,方法

构造器

与类名相同,没有返回值包括void
在new对象时会调用构造器
无参构造

修饰符 类名() {
}

有参构造
相当于方法重载
存在有参构造时想用无参构造必须显式定义无参构造

修饰符 类名(参数类型 参数名...) {
    this.类的参数 = 参数名;
    ...
}

封装

高内聚,低耦合
属性私有,get/set访问
提高代码与数据安全性
隐藏代码的实现细节
统一接口
系统可维护性

继承

对一些类的抽象整合
Java中为单继承
使用关键字extends继承父类
子类继承父类的所有方法(私有的不继承),而所有类默认继承object类
idea:Ctrl+h查看类继承关系
子类构造方法默认第一行隐式调用父类构造方法//super();
使用super代表对父类的引用
使用this代表对子类的引用
重写 子类与父类方法一致,方法体不同
在有继承关系下,子类重写父类的非静态方法

  • 方法名相同
  • 参数列表相同
  • 修饰符范围可以扩大不可缩小
  • 抛出的异常范围可以被缩小,但不能扩大
    idea:Alt+Insert->override

多态

**多态是方法的多态 ** 属性没有多态
父类和子类:有联系否则类型转换异常
存在条件,继承关系,方法重写父类引用指向子类
执行时看类型

  • static方法属于类
  • final方法不可继承不可重写
  • private方法私有不可从写
父类
public class Person {
    private String name;//属性一般私有,用get/set访问
    public int age;

    public Person() {
        //子类构造方法默认第一行隐式调用父类构造方法super();
        System.out.println("person无参构造");
    }

    //存在有参构造时想用无参构造必须显式定义无参构造
    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    public void run() {
        System.out.println("person run");
    }
}
子类
public class Student extends Person {
    public Student() {
        System.out.println("student无参构造");
    }

    @Override //注解:表示重写了父类方法
    public void run() {
        System.out.println("student run");
    }

    public void walk() {
        System.out.println("student walk");
    }
}
main类
//一个对象的实际类型是确定的
//指向的引用类型是不确定的
//student调用方法为自己的或继承父类的
Student s1 = new Student();
//父类可以指向子类,不可以调用子类方法
Person s2 = new Student();//对象能执行的方法主要看左边,而子类如果重写了这个方法执行子类的
//引用类型 对象名 = new 实际类型();
Object s3 = new Student();
s1.run();
s2.run();//子类重写父类方法,执行子类的方法
s1.walk();
//s2.walk();会报错
((Student)s2).walk();
//instanceof (类型转换) 引用类型,判断一个对象是什么类型
System.out.println(s3 instanceof Person);//true

static使用

//静态导入包
import static java.lang.Math.random;

public class Person {
    //2.在对象创建时执行
    {
        System.out.println("匿名代码块");
    }

    //1.和类一起创建执行,只执行一次
    static {
        System.out.println("静态代码块");
    }

    //3.在对象初始化时执行
    public Person() {
        System.out.println("无参构造");
    }

    public static void main(String[] args) {
        System.out.println(random());
        Person person = new Person();
    }
}
posted @ 2020-10-14 16:04  Jelle  阅读(82)  评论(0)    收藏  举报