Java面向对象

Java面向对象重要的引言

  • 在Java中存储单个数据可以使用八大基本数据类型来储存,储存多个同种类型的数据可以用到数组,用面向对象可以存储不同类型的数据,至少比数组的方式更近一步,利用面向对象可以把世界上的事或物转换到计算机中
  • 数据是用来使用的,当解决了把数据存到计算机里的问题之后,新的问题就是如何使用这些数据,面向对象中可以创建各种不同的方法,用来操作和使用数据,这就是封装的基本含义
  • 在使用这些方法的时候,会有大量的重复的代码,尝试这将这部分重复的代码,提纯,重写到一个公用的方法中,并且在不同的类里使用,这将极大的提高代码的复用率,这就是继承存在的重要理由
  • 在操作数据的时候,最基础的设想就是,使用同一种方法可以操作不同类型的数据,并且得到相同的反馈,这里说的反馈是计算机可以根据数据类,类型的不同,反馈正确的结果,这就是多态具体实现的内容.
  • Java面向对象的核心内容 类
    • 类是一种数据结构(逻辑结构) ,组织多种数据类型的结构,数组做不到的,类可以做到,是对数据管理的一种进步,类中不仅可以存储数据,还可以放置方法,由方法来操作数据
  • 类的特点
    • 封装:用类把数据和操作数据的方法封装在一起
    • 继承:类和类之间的关系,被继承的类称为父类,子类继承父类所有的公用的属性和方法
    • 多态:是面向对象的灵魂

封装

在了解封装的意义的时候首先要了解什么是类

  • 类就是一个普通的名词
  • 类就是一个数据结构(逻辑结构)
    • 变量只能存储单个数据类型的数据:int i = 100;
    • 数组能存储多个相同类型的数据:int[ ] a = new int[10];,数组也是一种数据结构
    • 类能储存多个不同类型的数据,还可以有多个操作数据的方法 比如:
public class Student{
	int age;//学生的年龄
	String name;//学生的姓名
	public void Study(){
		//学生学习的方法,这里的方法是一个抽象的名词,可以有不同的实现逻辑
	}
} 
  • 类是一种特殊的由程序员定义的数据类型
    • int a= 10;是以a为理由向内存申请int类型的空间并存上10.
    • int [ ] a = new int [10]; 是以a为理由向内存申请10个int类型的空间,有初始值0
public class Student{
	int age;//学生的年龄
	String name;//学生的姓名	
}
	Student stu = new Student();//以stu为理由向内存申请Student类 的  类型的数据空间

stu里的age是0,name是null.

  • 有类这种数据类型,就可以通过这种数据类型在堆空间中申请内存,可以用类 类型申请多个空间,每个空间对应一个学生的信息
  • 通过这种方式就可以把现实世界中的物或事转到计算机的内存里,通过类这种类型存储在计算的内存里

实际的Java语法创建一个类是很简单的,难得是把现实世界中的物或事转换到计算机里来

public class 类名{
	//多个属性
	//多个方法
}
  • 总结什么是类,什么是面向对象
    程序员要做面向对象,首先要考虑在类中放置什么样的属性和方法
       类里的属性:  代表数据
       类里的方法:  代表功能
    其次,要掌握对象
       对象就是通过程序员 new 出来的一个变量,相当于很多不同类型的数据,不同的方法的集总,可以通过对象打点调出来,对象所对应的类里的属性和方法.

了解了类和对象后,就要考虑数据如何存储,和数据的安全性的问题

在类中,可以存储数据,并把数据做成某个类私有的属性,通过公有的方法来访问私有的属性,这样就保证了数据的安全性,因为方法是可以写逻辑,通过这种逻辑来保证数据的安全性,通过给类构造方法,getter,和setter来保证数据的安全性,并同时操作类里的数据

给对象存储数据的方式

通过公有的setter方法(就是类里的一个方法)

用构造函数的方法来存储数据(着重指出)

  • 构造函数不能有返回类型
  • 构造函数的名称必须和类名一样
  • 如果类中没有给出一个构造方法,那么系统会默认给出一个构造函数,这个构造函数是无参数的空方法,简称空的无参构造
  • 构造函数是可以有参数的,如果书写了有参构造,建议在写一个无参构造
  • 构造函数可以通过 构造生成器来自动生成

这就是封装的基本内r容
把私有的数据封装,用公有的getter ,setter 和构造存储数据和取出数据
封装功能的类,不封装数据
把现实世界中的物和事转换到计算机当中去
而 类中封装的就是属性和方法

简言之,就是把数据和操作数据的方法,放到一个类中,然后通过这个类来访问这些数据,和使用类里的方法

继承

  • 继承必须以封装为基础
  • 实现继承就是为了代码的重用,提高代码的复用率
  • 因为现实世界里有很多的继承关系,为了把现实世界中的物和事转换到计算机中取,就需要继承
  • Java的继承,同时增加了类与类之间的关系,继承关系
  • Java的根类Object 所有的类都默认继承自Object
  • Java的继承是通过 extends关键字来实现的
  • 有了Java的继承,好处就是代码的重用,坏处就是增加了类与类之间的关系,是得类与类之间的关系复杂了

继承中几个容易混淆的概念

  • 继承能够获得长辈非私有的东西,(属性或方法)
  • 子类不是拥有长辈的东西,只是子类对长辈的东西拥有访问性
  • 类里的东西就是本类自己的
  • 子类可以通过长辈自己的方法,操作长辈的私有属性

super关键字

  • super(参数列表)参数列表可以是零个也可以是多个
  • 调用父类的构造,且super(参数列表只能写在子类构造的第一条语句)
  • super()调用的是父类的无参构造,如果不写,系统会自动填上
  • super.用来调用父类的方法或属性,前提是父类允许访问

结论

  • 做继承就是为了使用长辈中的东西(属性和方法),即子类可以访问长辈的属性和方法,所以继承的优点就是可以提高代码的复用率
  • 继承的缺点就是,增加了类与类之间的关系,如果继承的层次越多,那么子类可以访问的内容就越多,但是子类并不都需要

在开发中少用继承,多用组合

  • 什么时候用继承
    • 继承的层次不要太多
    • 要使用多态的时候必须以继承做为前提
  • 什么时候使用组合
    • 想要获取别的类中的方法和属性的时候可以使用组合
    • 现用现组合
  • 组合的方式有两种
    • 在类中放置属性/组合属性
public class XX{
	private Test test;//这是另一个Test类的对象
	public void method(){
		//可以在这个类里操作test中的数据
	}
}
  • 在类的方法中组合数据
public class XX{
	public void method(Test test){
		//此方法中操作test对象的数据
}

继承中的重写

  • 跨类且继承,子类重写父类的方法
  • 方法重写的要求
    • 子类重写的方法的权限修饰符必须大于或等于父类
    • 子类重写的方法的返回值类型必须小于或等于父类
    • 如果父类的方法的返回值是基本数据类型或void那么子类在重写方法的时候,返回类型必须一致
    • 如果父类的返回类型为最终类(final),那么子类的返回类型必须一样,一般情况下父类中方法的声明跟子类的一致即可

重写和重载的区别

  • 重载
    • 在类内,相同的方法名称,但参数的个数和类型不同
  • 重写
    • 跨类且继承,子类把长辈的方法覆盖

抽象类和接口

  • 如果一个类中,有方法没有方法体,那么这个方法就是抽象方法,即方法只有声明,没有方法体,如果一个类中有抽象方法,那这个类就是抽象类,说明这个类不具体
  • 抽象类也是类,有类就可以放属性和方法(有方法体/没有方法体)
  • 抽象类可以放置属性,属性可以存数据
  • 抽象类可以放有方法体的方法此方法能够完成某个功能
  • 抽象类,抽象到极致就是接口
  • 接口中所有的方法都是抽象方法,即没有方法体
  • 接口的方法都是公有的
  • 接口是不能实例化对象的
  • 必须由子类实现接口,且子类可以实现多个接口,解决了Java单继承的问题
  • 子类实现接口的关键字 implement(继承类,实现接口)
  • 子类将接口中的所有方法都实现了,才可以实例化对象,否则子类就是抽象类
  • 接口中可以有属性,但默认是,public static final,不适合存储数据
  • 结论
    - 接口更适合放置方法,但不是合存数据,类更适合存数据,接口就是对子类功能的规范,子类必须全部实现接口中的方法

多态

  • 引言
      顾名思义就是多种表现状态
      最直观的理解,有对象名称,用对象打点调方法,在不同时候的执行的方法功能是不一样的

多态的具体实现

  • 多态是以继承为基础的,子类继承长辈的方法,并在子类中重写长辈的方法,用长辈打点调方法,执行的是子类里重写过的方法,不同的子类,可以重写多种父辈的方法,父辈的方法可以是抽象方法
  • 接口更适合做多态,接口的方法都是抽象方法,必须由子类给出方法体后才可以实例化对象,
  • 接口是public static final 可以以直接用接口定义,接口类 类型的变量,然后用这个变量打点调方法,实现的就是子类重写的方法
  • 简言之,就是用长辈调用子类重写过的方法,并且根据子类类型的不同,调用不同的子类,以达到结果有多种形态的目的
  • 多态的判断标准
    • 跨类且继承,多态是以继承为基础的
    • 子类重写长辈的方法
    • 子类对象赋值给长辈的引用
    • 用长辈的引用打点调方法
      • 用对象能调出哪些方法,取决于这个对象所对应的类或接口中有哪些方法
      • 如果长辈的引用打点调用的方法是重写过的方法那么就执行子类重写过的方法
      • 如果长辈的引用是没有重写过的方法就执行长辈中的方法
  • 能够表达出多态的应用场景
    • 以长辈作为方法或函数的参数
    • 以长辈作为方法或函数的返回值

扫描或搜索java泡腾片获取更多有趣内容

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值