Java学习(五):面向对象

这篇博客介绍了Java类的初始化、构造器的使用,包括无参构造和有参构造。详细讲解了方法的重写、super关键字的应用以及静态和匿名代码块的执行顺序。还探讨了实例of操作符的用法以及静态导入包的便利性。此外,文章提到了抽象类和接口的区别,强调了面向接口编程的重要性,并展示了如何实现接口。最后,涉及了内部类的概念。
摘要由CSDN通过智能技术生成

简单类的初始化

public class Person {

    String name;

    //一个类即使什么都不写,也会存在一个方法
    //显示的定义构造器
    //new的本质就是在调用构造器
    public Person(){}

    //有参构造
    public Person(String name){
        this.name = name;
    }

}
  • 定义构造器的快捷键:alt + insert
  • this指示当前类

private 私有

public class Student {
    private String name;
    private int age;
    private char sex;

	//以下通过alt + insert快捷键即可生成
    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 char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }
}
//---------------------------------------------------------
//主函数
public class Appliicatiion {
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("zq");
        System.out.println(student.getName());

    }
}

继承 extends

  • ctrl + h:查看类的继承关系

  • super:访问父类的属性和方法

  • private无法调用

  • 子类中默认调用父类的构造器 super()

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

public class B {
   public static void test(){
       System.out.println("B => test()");
   }
}


public class A extends B {
   public static void test(){
       System.out.println("A => test()");
   }
}


public class Appliicatiion {
   public static void main(String[] args) {
      //方法的调用只和左边定义的数据类型有关
       A a = new A();
       a.test();  // A => test()

       //父类的引用指向了子类
       B b = new A();
       b.test();  // B => test()

   }
}

方法重写

public class B {
    public void test(){
        System.out.println("B => test()");
    }
}


public class A extends B {
    //重写(不加static),通过alt+insert快捷生成,可以不加注释
    @Override //注解,有功能的注释
    public void test() {
        //super.test();
        System.out.println("A => test()");
    }
}


public class Appliicatiion {
    public static void main(String[] args) {
       //方法的调用只和左边定义的数据类型有关
        A a = new A();
        a.test();  // A => test()

        //父类的引用指向了子类
        B b = new A();
        b.test();  // A => test()

    }
}

在这里插入图片描述

instanceof

X instanceof Y  //能不能编译通过,取决于X和Y之间存不存在父子关系

在这里插入图片描述

static静态代码块

public class Person {
    {
        System.out.println("匿名代码块");
    }
    
    //只执行一次
    static {
        System.out.println("静态代码块");
    }

    public Person(){
        System.out.println("构造方法");
    }

    public static void main(String[] args) {
        Person p = new Person();
        //输出:静态代码块
        //     匿名代码块
        //     构造方法
        //注意执行顺序:静态代码块、匿名代码块、构造方法
    }
}

静态导入包

import static java.lang.Math.random;
//可以直接通过random()使用

抽象 abstract

父类中,抽象类中的抽象方法可以仅定义不实现,继承了它的子类必须重写抽象方法。
抽象类不能new,只能通过子类实现。

接口 interface

  • 普通类:只有具体实现
  • 抽象类:具体实现和规范(抽象方法)都有
  • 接口:只有规范,自己无法写方法~专业的约束! 约束和实现分离:面向接口编程
//接口都需要实现类
public interface UserService {
    //接口可以定义常量,默认public static final
    int AGE=99;
    
    //接口中的定义其实都是抽象的,省略了public abstract
    void run(String name);
}


public interface TimeService {
    void timer();
}


//类可以实现接口
//实现了接口的类,就需要重写接口中的方法
//利用接口可以实现多继承
public class UserServiceImpl implements UserService, TimeService {
    @Override
    public void run(String name) {

    }

    @Override
    public void timer() {

    }
}

内部类

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值