JavaSE基础(面向对象:封装、继承、多态、抽象方法、抽象类、接口、重写、重载、super、this、构造方法、包、枚举)

发布时间:2023年12月28日

前言

Java作为一种面向对象语言。支持以下基本概念:

  • 多态
  • 继承
  • 封装
  • 抽象
  • 对象
  • 实例
  • 方法
  • 重载

本节我们重点研究对象和类的概念。

  • 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
  • :类是一个模板,它描述一类对象的行为和状态。

面向对象:

对象

封装

继承

????????子类可以继承父类所有的方法和属性(构造方法除外)

????????子类除了有从父类中继承的还可以有自己独有的方法和属性

????????1、只支持单继承,不支持多继承

????????2、支持多重继承

????????3、子类与父类必须具备所属关系

? ? ? ? 4、父类中的private方法也可以被继承

? ? ? ? 5、子类不能直接使用父类中修饰符为private的属性,只能通过get和set进行获取和使用

构造方法

????????与类名相同的方法名称 不带返回值

????????构造方法可以重载

class Animal{
    
    //构造方法不能被重写但是可以被重载
    public Animal(){
    
    }

    public Animal(String name){
        System.out.println("I am "+name);
    }  
    
    public Animal(String name,int age){
        System.out.println("I am "+name+" and I am "+age+" years old");
    }  
}

this

? ? ? ? 当前类

? ? ? ? this.属性

? ? ? ? this.方法

super

? ? ? ? super.属性? ? ? ?

????????super.方法

????????当需要在子类中调用父类的被重写方法时,要使用 super 关键字。

public class SuperTest{
       
}

class People{
    public void say(String name){
        System.out.println("I am "+name);
    }
}

class China extends People{
    public void say(String name){
        System.out.println("hello everyone");
        super.say();
    }
}

当子类继承父类后 子类的无参构造器会隐式的调用super() 父类的无参构造器

如果父类中没有无参构造器 则子类会报错

? ? ? ? 解决方法一:在父类中定义一个无参构造器

? ? ? ? 解决方法二:在子类中调用父类的有参构造器

重写、重载

? ? ? ? 重写:重写(override)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!(方法名相同,形参相同,返回值类型可以不同但是必须为父类被重写方法返回值类型的子类)

? ? ? ? 重载:重载(overload) 是在一个类里面,方法名字相同,而参数不同, 返回类型可以相同也可以不同。

访问控制修饰符

? ? ? ? private? 本类

? ? ? ? default? ?本类中和本包中

? ? ? ? protected? 本类 本包 子类

? ? ? ? public? 所有类

多态

? ? ? ? 父类的引用指向子类的对象

? ? ? ? ?例如:? List arraylist = new ArrayList();

? ? ? ? 多态性:(根据取出来的对象不同调用不同的方法 叫做 虚拟方法调用动态绑定

? ? ? ? ? ? ? ? 编译时:看的是左边的父类的引用

? ? ? ? ? ? ? ? 运行时:看的是右边的子类的对象

public class PolymorphismTest{
    public static void main(String [] args){
      Person p1 = new Man();    //对象的多态性:父类的引用指向子类的对象
      p1.eat();
      p1.somke(); //报错
    }
}

class Person{
    public void eat(){
        
    }
    public void walk(){
          
    }
}

class Man extends Person{
    public void eat(){
        System.out.println("男人吃饭狼吞虎咽");
    }
    public void walk(){
        System.out.println("男人走路快"); 
    }
    public void somke(){
        System.out.println("男人喜欢抽烟"); 
    }
}

class Woman extends Person{
    public void eat(){
        System.out.println("女人吃饭细嚼慢咽");
    }
    public void walk(){
        System.out.println("女人走路慢"); 
    }
    public void huazhuang(){
        System.out.println("女人喜欢化妆");
    }
}

对象引用数据类型转换(Casting)?

????????向上转型:

? ? ? ? ? ? ? ? 多态的使用

????????向下转型:

? ? ? ? ????????Person p = new Man();

? ? ? ????????? Man man = (Man)p;? ?

?多态数组:

? ? ? ? Person[] personArray = new Person[6];

? ? ? ? personArray[0] = new Person();

? ? ? ? personArray[1] = new Man();

? ? ? ? personArray[2] = new Woman();

多态参数:

? ? ? ? public static void main(String [] args){

????????????????

? ? ? ? }

instanceof运算符

? ? ? ? Person p = new Man()

? ? ? ? if(p instanceof Man) 判断p的引用是否是Man对象类型??主要用来判断一个类是否实现了某个接口,或者判断一个实例对象是否属于一个类。

Object类

? ? ? ? java.lang.Object类是所有类的父类,所有类都默认继承Object类

? ? ? ? 子类可以继承Object类中所有的方法(Object类中没有属性)

? ? ? ? 如果Object中的类对子类不适应,子类可以重写Object类的方法

? ? ? ? equals()? 比较两个引用对象的地址值是否相同

? ? ? ? ==? ? ? ? ? ?比较两个值是否相同

? ? ? ? toString()

static

? ? ? ? 静态属性:

? ? ? ? ? ? ? ? public static String name;

? ? ? ? ? ? ? ? private static int age;

? ? ? ? 静态方法:

? ? ? ? ? ? ? ? public static void say(){}

非静态代码块

? ? ? ? {? ? ?}

? ? ? ? 通常为多个构造器中的共性内容进行初始化

静态代码块

? ? ? ? static {? ? ?}

final 修饰符

? ? ? ? 修饰变量

? ? ? ? 修饰方法

? ? ? ? 修饰类

抽象类、抽象方法

? ? ? ? abstract

接口

? ? ? ? interface

枚举

? ? ? ? enum

? ? ? ? package

? ? ? ? import

抽象方法

只声明而不实现的方法

abstract void say();

抽象类

含有抽象方法的类

public abstract class AbstractClass{
    abstract void say();
}

接口

[public] interface interfaceName{

}

文章来源:https://blog.csdn.net/qq_41765777/article/details/122780986
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。