java面向对象三大特性

1.封装性

属性封装

某一些属性,如果可以直接被其他类访问,这样的数据不安全。
解决办法:

  1. 先用private将属性封装起来
  2. 在类中设计两个方法,分别用来访问这个属性(setter、getter方法)

1.1private

是一个访问权限修饰符,被private修饰的成员只能在当前类中访问。

1.2setter、getter方法

可以把属性私有化后,通过setter、getter方法用于外界对属性的访问。并且可以对数据进行过滤,从而使属性在我们期望的范围内。

JavaBean设计规范
1.所有的类必须是public权限
2.所有的属性都需要私有化,并提供setter、getter方法

1.3单例设计模式

单例的定义:希望一个类在程序运行过程中,始终只有一个对象。
饿汉式单例:

  • 先把构造方法私有化
  • 设计一个私有的、静态的当前类对象,并初始化
  • 设计一个方法,返回第二步实例化的对象
public class Instance{
	private Instance(){}
	private static Instance ins = new Instance();
	public Instance getInstance(){
		return Ins;
	}
}

懒汉式单例

  • 先把构造方法私有化
  • 设计一个私有的、静态的当前类对象,不初始化
  • 设计一个方法,返回第二步声明的对象,判断这个实例是不是null,如果是则创建,如果不是则return这个实例
public class Instance{
	private Insetance(){}
	private static Instance ins = null;
	public Instance getInstance(){
		if(ins == null){
			ins = new Instance();
		}
		return ins;
	}
}

2.继承

2.1继承的基本概念和语法

如果有多个相关的类有相同的属性和行为,那么我们可以将这些相同的部分提取出来,单独做成一个类。
这个被提取出来的类就是:父类、基类、超类
具有相同属性和行为的类:子类、派生类
语法用extends关键字来描述

//Person 是Animal的子类
//Animal是Person的父类
class Person extends Animal{}

2.2继承的特点

  • 子类可以访问父类中看得到的成员(没有被private修饰的)
  • java是一个单继承的语言,一个类只能有一个父类,但是一个类可以有多个子类
  • 子类在继承父类的成员的同时,还可以有自己特有的属性和方法(对父类的功能进行扩展)

2.3继承中的构造方法

一个对象在实例化的时候,会先实例化从父类继承的属性,然后再实例化自己特有的属性。在实例化父类部分的时候,默认调用父类无参的构造方法。

  • 如果父类没有无参构造,子类的对象无法实例化
    • 给父类添加一个无参构造
    • 在子类的构造方法中显式地调用父类有参构造方法
  • 关键字super
    • 类似于this
    • super是对父类对象的引用

2.4访问权限修饰符

访问权限:描述一个类、属性、方法可以被访问到的范围
访问权限包含四种:公共权限,保护权限、包权限、私有权限

  • 公共权限:public在当前项目任意位置均可访问
  • 保护权限:protected在当前包的任意位置、跨包的子类中可以访问
  • 包权限:package、default在当前包中可以访问,一般这个权限不写出
  • 私有权限:private只有本类可以访问

2.5方法的重写(Override)

子类对父类的方法进行重新实现,又称为覆写
重写过程中需要注意:

  • 方法名必须和父类方法名一致,子类只能重写父类中存在的方法。
  • 参数必须和父类中方法参数一致
  • 访问权限不能比父类更加严格
  • 返回值要和父类方法返回值类型一致,或者是其子类型
    @Override是一个注解,放在方法上方,可以对这个方法进行校验,判断是不是重写的方法。

2.6final关键字

final表示最终的,可以用来修饰属性,类,方法

  • 修饰属性:这个变量的值不可改变,是一个常量
  • 修饰方法:这个方法不可被重写
  • 修饰类:这个类不可以被继承

2.7Object类

Object类是java的根类,任何类都是直接或间接的继承自Object。其定义了很多方法,供其子类使用。

  • toString()
    • 返回一个对象的字符串形式,当需要将一个对象以字符串输出的时候,就会调用这个方法
    • 可以重写这个方法,设置指定类的对象的字符串表现形式
  • hashCode()
    • 默认返回一个对象地址的HashCode
    • 如果无关哈希表结构,这个方法基本没用
    • 涉及哈希表结构,这个方法很重要
    • HashSet、HashMap
  • equals()
    • 可以通过自定义规则来比较两个对象
    • 在定制规则的时候需要注意以下几点:
      • 如果obj是null结果一定是false
      • 如果this==obj结果一定是true
      • 如果this和obj类型不同,结果一定为false
  • getClass()
    获取一个对象的类型

3.多态

3.1对象的转型

向上转型

  • 由子类类型转为父类类型
  • 是一个隐式转换,肯定可以转换成功
  • 向上转型后的对象,将只能访问父类共有的成员

向下转型

  • 由父类类型转为子类类型
  • 是一个显式转换,不一定转换成功
  • 向下转型后的对象,将可以访问子类特有的成员

3.2instanceof关键字

如果向下转型失败,程序会抛出ClassCastException;可以加上类型判断,判断是否为子类类型
语法:

对象 instanceof 类

以上为判断一个对象是不是指定的类型,返回值是一个boolean

3.3多态在父类和子类中的体现

  • 父类的引用可以指向子类的对象
  • 向上转型后的对象,在调用父类方法的时候,其实最终实现是子类的重写实现
  • 多态:由向上转型后的对象调用相同的方法,最终实现不一样

3.4多态在一个类中的体现

用一个类的对象,调用类中同名的方法,结果也不一样,就是重载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值