JavaSE入门:JVM四大特性:面向对象——封装,继承,多态,抽象

文章目录

  • **面向对象特性**
    • 封装
      • 本质
      • 概念
      • 作用
    • 继承
      • 本质
      • 目的
      • 语法
      • 注意
    • 多态
      • 本质
      • 前提条件
      • 多态的形式
      • 多态发生的时间
      • 缺点
    • 抽象
      • 本质
      • 抽象类定义
      • 抽象方法的定义
      • 抽象类的目的
      • 注意

面向对象特性

封装,继承,多态,抽象

封装

本质

对事物/对象的属性进行包装

概念

把对象的所以组成部分组合在一起或 使用访问控制修饰符将数据隐藏。

作用

适当的封装可以使代码更容易理解和维护,加强代码安全性。

继承

本质

为类复用的一种语法结构

目的

代码重用

语法

class 子类名 extends 父类名{}

注意

  • Java中只支持单继承,并且是链式继承(不能形成闭环继承)
  • Java中必有根类:object;如果一个类没有显示继承其他类,那么该类默认继承Java.lang.Object
public class SupClass {
	public void m1() {
		
	}
	public void m2() {
		
	}
}
public class SubClass extends SupClass {
	public void m3() {
		
	}
}

多态

多态涉及到了软件设计六大原则里面的里氏替换原则:能够使用父类的地方,一定可以使用子类。

本质

父类引用指向子类对象

前提条件

在继承关系里面

多态的形式

  • 局部/成员变量:直接声明,父类 变量名 = new 子类();声明是父类,赋值是子类。
  • 实参/形参:参数列表是父类,调用是子类。
  • 返回值:声明是父类返回子类对象

多态发生的时间

多态发生在赋值时候

缺点

丢失子类特有属性

  • 如果父类没有,不能访问
  • 父类有的成员方法,子类也有,覆写,执行子类
  • 父类有的成员方法,子类没有,执行父类
  • 如果父类有非成员方法,不管子类有没有,执行父类
		Sup s=new Sub();
//		父类非成员方法
		System.out.println(s.i);
//		子类独有,不能用多态访问,编译报错
//		System.out.println(s.a);
//		父类和子类都有的成员方法,覆写,执行子类
		s.m1();
//		父类有,子类没有覆写的,执行父类
		s.m2();
//		没有编译报错  ,证明   多态发生在赋值的时候
//		Sup sup=null;
//		sup.m1();
//		System.out.println(sup.i);
	}
}
class Sup{
	int i=10;
	public void m1() {
		System.out.println("父类成员方法");
	}
	public void m2() {
		System.out.println("父类成员方法2");
	}
}
class Sub extends Sup{
	int i=20;
	int a=3;
	public void m1() {
		System.out.println("子类成员方法");
	}
}

抽象

本质

根据具体事物抽象出来的概念/标准,与之对应的是类和接口。

抽象类定义

用abstract修饰的类

抽象方法的定义

用abstract修饰的方法,没有{}

抽象类的目的

让类不能被实例化,只能用于继承

注意

  • 含有抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法
  • 抽象类不能被实例化对象,但是抽象类有构造方法,用于子类实例化对象。
  • abstract和final不能同时修饰。final修饰的抽象类不能被继承,而abstract修饰的类就是用来继承的。
  • 一个类继承抽象类,那么这个类要么实现所有的抽象方法;要么实现部分或者不实现抽象方法,那么这个类也要被abstract修饰,它也是一个抽象类。
abstract class A{
	public void eat() {
		System.out.println("这是一个抽象类");
	}
//	抽象方法
	public abstract void move();
	public abstract void add();
	public abstract void delete();
	public abstract void load();
	A(){
		System.out.println("A的构造方法");
	}
}
abstract class B extends A{
}

你可能感兴趣的:(笔记,JavaSE,java)