Java面向对象

Java面向对象

三大特性

  • 封装:比如将成员变量用一个方法来进行存取,而不是直接对成员变量操作。
  • 继承:子类拥有父类的所有方法以及成员。
  • 多态:相同方法(名字、参数相同),但是在不同类中,他们执行的内容也可能不一样,比如动物类有个方法是叫声,而子类狗和子类猫继承动物类,虽然都有叫声方法,但是他们的叫声内容却不一样。

初始化和创建对象

//学生类
public class Student{
    //成员
    String name;
    int age;
    
    //方法
    public void study(){
        System.out.println(this.name + "在学习");
    }
}

//项目启动类
public class Application{
    public static void main(String[] args){
        //创建对象
        Student s = new Student();
        
        //赋值
        s.name = "小金刚";
        s.name = 3;
        
        //打印输出
        System.out.println(s.age + "岁的" + s.name);
    }
} 

构造器

//学生类
public class Student{
    //成员
    String name;
    int age;
    
    //构造器方法名与类名相同,参数可有可无,类默认有一个无参构造器
    //若写了有参构造,需要显示定义无参构造
    
    //无参构造器
    public Student(){
    }
    //有参构造器
    public Student(String name, int age){
        this.name = name;
        this.age = age;
    }
    
    //IDEA可使用快捷键,ALT+insert来创建构造
}

封装

  • 高内聚,低耦合。高内聚就是类内部数据操作细节自己完成,不允许外部干涉;低耦合就是仅暴露少量的方法给外部使用。

  • 属性成员私有,用Get/Set进行存取。

继承

  • 所有类默认直接或间接继承Object类。
  • 关键字extands。
  • Java只有单继承,没有多继承。
  • 子类继承父类后,拥有父类全部方法(私有的不可以被继承)

快捷键 Ctrl + H 可以查看继承树。

重写

  • 相同方法(名字、参数相同、方法体可不同),但是在不同类中。

  • 修饰符:范围可以扩大但不能缩小, public > protected > default > private。

  • 抛出异常:范围可以被缩小但不能扩大,例如 ClassNotFoundException < Exception(大)。

  • private方法、final常量和static 方法不可以重写。

  • 静态方法重写(static):方法调用的时候只和左边,定义的数据类型有关,其实这不是叫重写。

  • 非静态方法重写:才是真正的重写,和new 分配的数据类型有关。

多态

//Student类继承Person类
//Person类有run()方法
//Student类重写run()方法和自己独有的eat()方法

//类本身引用s1 能够调用的方法都是自己的或者继承父类的
Student s1 = new Student();
//父类型引用s2 不能调用子类独有的方法,调用被重写的方法的时候以右边子类型为准
person s2 = new Student();

s1.run();//可以执行,执行的是Student的run()方法
s2.run();//可以执行,执行的是Student的run()方法

s1.eat();//可以执行,执行的是Student的eat()方法
//s2.eat();//不可以执行会报错,需要类型强制转换
((Student) s2).eat();//可以执行,执行的是Student的eat()方法

Instanceof

//类型A X = new 类型B();
System.out.println(X instanceof Y);
  • 编译是否通过,看X的左边定义类型Y定义类型是否有父子关系。
  • 结果T与F,取决于X的右边的定义类型Y定义类型是否有父子关系。

注意:

  • 父类引用转子类引用:强制转换。
  • 子类引用转父类引用:可自动实现,但是可能会丢失子类独有的方法。

static

static定义的代码,在类初始化中,第一个被执行且只执行一次。

代码执行顺序:静态代码块(执行一次)>匿名代码块>构造方法。

静态导入包:

import static java.lang.Math.random;
import static java.lang.Math.PI;
pubic class Test{
 public static void main(Stringp[] args){
     //可以不通过Math.random(),可以直接方法名调用
     System.out.println(random());
     //可以不通过Math.PI,可以直接使用
     System.out.println(PI);
 }
}

抽象类abstract

  • 抽象方法,用abstract修饰,只有方法名字,没有方法实现。
  • 子类必须实现父类的所有抽象方法(除非子类也是抽象类,那就由子子类实现抽象方法)。
  • 抽象类不能被实例化。
  • 抽象方法一定要在抽象类里。
  • 抽象类里可以有普通方法。

接口

  • 关键字interface。
  • 接口内的所有方法都是默认抽象abstract、public。
  • 一个类可以有多个接口。
  • 类必须实现接口的所有方法。
  • 接口不能实例化。

内部类

A类中有B类,A类是B类的外部类,B类是A类的内部类。

  • 成员内部类
  • 静态内部类
  • 匿名内部类
  • 局部内部类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值