Java面向对象基础知识(一)

继承

基本概述
概念: 所谓的继承,就是生活中的继承. 比如"子承父业","儿子继承父亲的财产".Java中指的是"子类继承父类的代码"
格式: 
	public class 子类 extends 父类{
        
    }
注意:
	1.Java只支持单继承,不支持多继承,但支持多层继承.
    2.继承必须是逻辑能讲得通的继承
    3.构造方法不能被继承
优缺点
优点:
	1.提高了代码的复用性(少写代码了).
	2.提高了代码的维护性(修改起来更方便了)
缺点:
	1.增强了耦合性,降低了子类的独立性.
	2.继承就必须全继承,不能部分继承. 
成员特点
成员变量: 遵循就近原则. 子类局部变量 -> 子类成员变量 -> 父类成员变量
成员方法: 遵循就近原则. 子类成员方法 -> 父类成员方法
构造方法: 子类构造方法默认会调用父类无参构造方法.如果父类没有无参构造,则报错.
super
代表含义: 	this代表本类  			super代表父类		
成员变量:	this.成员变量			super.成员变量
成员方法:	this.成员方法			super.成员方法
构造方法:	this(...)			   super(...)
方法重写Override
概述: 当父类和子类出现一模一样的方法,那这两个方法之间的关系,就称之为"方法重写".又叫做"方法覆写,方法覆盖".
特点: 子类中出现和父类一模一样的方法.
场景: 对父类方法不满意时,重写父类方法.

访问修饰符

权限修饰符
private: 只能在本类内部访问,出了当前类,就不能用了.
缺省(不写): 在同一个包中可以访问.
protected: 在同一个包中,或在子类中,可以访问.
public: 在任何地方都可以访问.
状态修饰符
final: 最终
static: 静态
abstract: 抽象

final

概述: 最终的,不可改变的.可以用来修饰"类,成员方法,成员变量".
特点:
	修饰类: 该类是最终类,不能被继承,
	修饰方法: 该方法是最终方法,不能被重写.
	修饰变量: 该变量是常量,不允许被再次赋值.
注意:
	修饰基本数据类型变量: 变量中记录的值不允许改变.
	修饰引用数据类型变量: 变量中记录的地址不允许改变.

static

概述: 表示静态,可以修饰"成员变量,成员方法".
特点:
	1.被static修饰的成员变量,被类的所有对象共享.
	2.被static修饰的成员方法,可以被"类名.成员方法"调用.
	3.静态只能访问静态.

多态

概述
概念: 所谓的多态,指的就是"多种形态",简单来说,就是"一种事物,在不同的环境下,表现出不同的状态".
特点:
	1.有继承或实现关系(多态的前提).
	2.有方法重写(多态的意义)
	3.有父类或父接口引用指向子类对象(多态的核心)
访问
访问成员变量: 编译看左边(父类),运行看左边(父类)
访问成员方法: 编译看左边(父类),运行看右边(子类)
优缺点
优点: 提高了代码的扩展性(把父类当作方法的参数,调用方法时,可以传递任意的子类).
缺点: 不能使用子类特有的功能.
转型
向上转型: 其实就是自动类型转换,一般是"父类引用指向子类对象".
向下转型: 其实就是强制类型转换.一般是"把父类引用转为子类引用"
instanceof
格式: boolean result = 对象 instanceof 类型;
运算:
	如果"对象"是该"类型"的对象,则返回true.
	如果"对象"不是该"类型"的对象,则返回false.

抽象

概述
概述: 抽象在Java中使用abstract表示,abstract关键字可以修饰"方法,类".
概念:
	被abstarct修饰的类,被称之为抽象类.
	被abstarct修饰的方法,被称之为抽象方法.
特点
抽象类:
	1.抽象类不能实例化.
	2.抽象类的子类,必须重写抽象类中的所有抽象方法,除非子类也是抽象类.
抽象方法:
	1.抽象方法所在类必须是抽象类
	2.抽象方法可以看作是一种规则,子类必须重写

接口

概述
概述: 接口是一种比抽象类更加抽象的类层次的结构,定义的一种规范.
语法:
	定义接口: public interface 接口名{} 
	实现接口: public class 子类 implements 接口名{}
注意
1.实现接口的子类,必须重写接口中的所有抽象方法.除非子类也是抽象的.
2.类和接口的关系是实现关系,使用implements关键字实现.
成员
变量: 只能是静态常量.默认修饰符是 public static final
方法: 只能是抽象方法.默认修饰符是 public abstract
构造: 没有构造方法.

相关扩展

类和接口关系
类和类之间: 继承关系,只能单继承,不能多继承,但可以多层继承.
类和接口之间: 实现关系,可以单实现,也可以多实现,还可以在继承的同时实现接口.
接口和接口之间: 继承关系,可以单继承,也可以多继承.
接口和抽象类
内容:
	抽象类: 成员变量,成员方法,构造方法,静态常量,抽象方法
	接口: 静态常量,抽象方法.
意义:
	抽象类: 抽象类是一个类,定义的是一个类别.抽取的是子类的共有内容.
	接口: 接口不是类,抽取的是"共有的功能/规则"
场景:
	抽象类: 如果类中包含抽象方法,则该类定义为抽象类.
	接口: 如果类中只有抽象方法,则该类就可以变成接口
接口新特性
① 默认方法
格式: 
	public default void 方法名(){
		方法体
	}
作用:
	子类可以重写该方法,子类也可以不重写该方法.
注意:
	JDK8之后才能用.
② 静态方法
格式: 
	public static void 方法名(){
		方法体
	}
作用:
	可以直接通过"接口名.方法"来调用.
注意:
	JDK8之后才能用.不建议使用.
③ 私有方法
格式: 
	private void 方法名(){ 方法体	}
	private static void 方法名(){ 方法体	}
作用:
	静态私有方法是抽取"静态方法的公共部分". 非静态私有方法是抽取"默认方法的 "
注意:
	JDK9之后才能用.不建议使用.

内部类

基本概述
概述: 定义在"类的内部"的类,就称之为"内部类".
分类:
	局部内部类: 放在方法内部的"内部类",就是局部内部类
	成员内部类: 方法类中方法外的"内部类",就是成员内部类.
常规内部类
① 成员内部类
概述: 成员内部类是放在"类中方法外"的内部类.
格式: 外部类.内部类 对象名 =  new 外部类().new 内部类();
注意: 
	1:实际开发中,一般不用成员内部类
	2:如果要用,一般也会把内部类私有化
② 局部内部类
概述: 局部内部类是放在"方法中"的内部类
作用: 放在方法中的内部类,方法执行完毕之后,就会被销毁,可以节省内存.
匿名内部类
概述: 匿名内部类,就是"局部内部类"的简化格式.
格式:
	new 父类/父接口(){
		//重写方法
	}
注意:
	匿名内部类 -> 本质上是一个"实现类父类或父接口的子类的对象"

Lambda表达式

基本概述
概述: Lambda表达式就是"匿名内部类"的简化格式. 依据"可推断可省略"原则,进行优化.
快捷: 鼠标点击灰色区域 -> Alt + 回车 -> 回车
格式: (参数) -> { 方法体代码 }
语法特点
语法要求:
    1:父层次必须是"接口"
    2:父接口中"有且仅有一个抽象方法"
省略规则:
	1:参数类型可以省略.
	2:如果参数只有一个,则()可以省略.
	3:如果代码只有一句,则"{},分好,return"都可以省略
Lambda和匿名内部类的区别
所需类型:
	Lambda: 只能是接口
	匿名内部类: 啥都行.
要求不同:
	Lambda: 接口"有且仅有一个抽象方法"
	匿名内部类: 没要求.
编译不同:
	Lambda: 编译后不会产生class文件(会在内存中产生class文件,用完之后立即销毁).
	匿名内部类: 会产生class文件,文件名"外部类$xxx.class"

API

概念:
    API:  API指的是"Java提前做好的那些类".
    API文档: 指的是"Java提前做好的类的说明书."
操作:
	1.打开API文档
	2.在左边索引位置下边的搜索框中,填写"你要找到类的名称",找到之后,点击回车
	3.看右边,类的说明
	4.看右边构造方法(有了构造方法才能创建对象)
	5.看普通方法(普通方法就是该类提供的功能)

Math

概述: Math类中,定义了"和数学运算有关系的功能"
方法:
	public static int abs(int a)		//返回参数的绝对值
    public static double ceil(double a)	//向上取整
    public static double floor(double a)	//向下取整
    public static int round(float a)	//四舍五入
    public static int max(int a,int b)	//返回两个int值中的较大值
    public static int min(int a,int b)	//返回两个int值中的较小值
    public static double pow(double a,double b)	//返回a的b次幂的值
    public static double random()		//返回值为double的随机数值,[0.0,1.0)

System

概述: 里边包含了一些和系统有关系的方法.
方法:
	public static void exit(int status); //终止当前虚拟机(status=0表示正常关机,其他都是异常)
	public static long currentTimeMillis(); //获取当前系统时间的毫秒值
	public static void arraycopy(数据源, 开始位置, 目的地, 目标位置, 拷贝个数); //数组拷贝 

Object

概述: Object是一切类的父类,所有的类都继承自Object.
方法:
	public String toString(); //默认返回对象的"全类名@地址值".要求子类重写该方法,可以直接打印对象内容.
	public boolean equals(对象); //默认比较地址值,要求子类重写该方法,重写后可以比较对象的内容.

Objects

概述: 专门用来操作对象的工具类
方法:
	public static boolean isNull(Object obj);  	//其实就是"obj == null"
	public static boolean nonNull(Object obj);  //其实就是"obj != null"

BigDecimal

概述: BigDecimal是一个高精度的double类型数据.专门用于double类型的高精度运算.
构造:
	public BigDecimal(double d);	
	public BigDecimal(String s);	//推荐使用,精确运算时,必须使用字符串构造方法
方法:
	public BigDecimal add(另一个BigDecimal对象)		//加法
    public BigDecimal subtract(另一个BigDecimal对象) //减法
    public BigDecimal multiply(另一个BigDecimal对象) //乘法
    public BigDecimal divide(另一个BigDecimal对象)	//除法
    public BigDecimal divide(另一个BigDecimal对象,精确几位,舍入模式)	//除法
	public BigDecimal setScale(精确几位,舍入模式)	//保留几位精度
补充:
	BigDecimal.ROUND_UP 	//舍入模式 -> 进一法. 		新版本用: RoundingMode.UP  
    BigDecimal.ROUND_FLOOR	//舍入模式 -> 去尾法. 		新版本用: RoundingMode.FLOOR
    BigDecimal.ROUND_HALF_UP//舍入模式 -> 四舍五入. 	新版本用: RoundingMode.HALF_UP

包装类

概述
概述:	就是基本数据类型对应的"引用数据类型形式",一般用于"基本数据类型和String之间的相互转换"
组成:
	byte 	-> 	Byte
    short 	-> 	Short
    int 	-> 	Integer
    long 	-> 	Long
    float 	-> 	Float
    double	-> 	Double
    char 	-> 	Character
    boolean -> 	Boolean  
注意:
	所有包装类,除了类名不一样之外,其功能和操作方式几乎一模一样.
补充
装箱:	把"基本数据类型"变为"与之对应的包装类"
自动装箱: 指的就是自动发生的装箱操作 -> JDK5
拆箱: 把"包装类"变为"与之对应的基本数据类型"
自动拆箱: 指的就是自动发生的拆箱现象 -> JDK5
Integer
概述: Integerint类型的包装类
转换:
	//String   ->    int
		int num = Integer.parseInt("数字类型字符串");
	//int   ->    String
		String s = 数字 + "";
		String s = String.valueOf(数字);

Arrays

概述: 专门操作数组的工具类.
方法:
	public static String toString(int[] arr);	//把数组转换为"[元素,元素..]"形式的字符串 
	public static void sort(int[] arr);	//对数组进行排序(从小到大)
	public static int binarySearch(int[] arr, int key);	//通过二分查找的方式,从arr中找key

递归

概述: 递归指的是"方法自己调用自己的现象".
步骤:
	1.先定义方法(参数是不固定的n)
	2.在方法中,书写规则(规律).
	3.用"已完成的方法",修复"语法性错误".
注意:
	1.递归必须要有结束的标记.
	2.递归次数不能太多
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RainbowCoder

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值