java第四天

一.面向对象编程
1.面向对象编程和面向过程编程的区别:
从语言出发,C语言是完全面向过程的编程语言,C++是半面向过程半面向对象编程;java就是完全面向对象编程的语言;
面向过程开发:注重步骤,注重实现这个功能的步骤,注重实现过程的因果关系,面向过程没有对象的概念,只有实现这个功能的过程还有步骤。
面向过程的缺点,耦合度太高,扩展性不强;优点:效率高,便于快速开发,不用大量的前期准备(不需要前期进行对象的提取,对象建模)。
面向对象开发:缺点:前期投入大量的精力去建模。优点就是和人类认识世界一样的便于理解,然后耦合度低,扩展性高
二.涉及到的相关术语
OOA:面向对象分析
OOD:面向对象设计
OOP:面向对象编程
三.面向对象的三大特征
python也有:封装,继承,多态,任何一个面向对象的编程都包括这三个特征。
四.类和对象的概念
类:现实世界抽象出来的东西(不存在的),是一个抽象的模板,描述的是一类事物的共同特征
对象:对象是实际存在的个体,通过类实例化,然后就创建一个对象。类=属性(状态特征)+方法(动作特征)
五.java语言的编程就是通过模拟现实世界的问题,然后解决问题。
六.类的定义
语法结构
[修饰符列表] class 类名{
//类体=属性+方法;
//属性在代码上以“变量”的形式存在(描述状态)
//方法描述动作行为
}
修饰符列表可以省略;
七.对象的创建
类名 变量名=new 类名();
八.变量和引用区别
对象是通过new出来的,在堆内存中间存储。
引用:但凡是变量,并且变量中保存了内存地址指向堆内存的对象的就是引用。
九.内存图相关
1.画内存图不要体现代码,主要是“数据”;
2.必须有先后顺序,根据执行的先后顺序来画图,有助理清思路。
画内存图的重要作用,1.程序不运行,但是可以知道运行结果;
2.有助于调试程序,修改错误。
3.什么时候出现空指针异常;
空引用 当访问“对象相关”的数据的时候,就会出现空指针异常,
垃圾回收机制主要针对的就是堆内存。
4.方法在调用的时候是怎么传递参数的;
在java中,方法调用时的参数传递,和类型无关,都是将变量当中存储的值复制一份,然后传过去。值可能是数字,也可能是地址。

十.构造方法
1.当一个类里面没有提供任何构造方法的时候,系统会默认提供一个无参数的构造方法(缺省构造器)。
2.当一个类中手动提供啦构造方法,那么系统将不再提供无参构造方法。建议将无参构造方法一起写出来
3.构造方法支持重载的;在一个类里面构造方法可以有多个,并且所有的构造方法名字都是一样的。
语法格式:
public 方法名(形式参数列表){}
java中的构造方法是用来初始化一个对象的,并为为实例变量赋予合适的初始值。因此构造方法不需要返回类型。
  构造方法必须满足以下语法规则:
  (1)方法名必须与类名相同;
  (2)不要声明返回类型;
  (3)不能被static、final、synchronized、abstract和native修饰;
  (4)构造方法不能被子类继承,所以用final和abstract修饰没有意义。
  
十一.封装
1.为了保护数据的安全系,别的类不能直接访问数据,通常对类进行封装。
2.屏蔽复杂操作,显示简单的操作。
如何进行封:
第一步:属性私有化(使用private关键字进行修饰)
第二步:1个属性对外提供两个方法set(),用来重新更新数据,void返回值类型,为了保护数据的安全性。可以设立关卡保证数据的安全;还有get()方法,用来获取数据,通过这个来获取属性(通过属性的数据的类型来决定返回值类型。)set还有get()都是实例方法不能用static修饰。访问实例方法必须先new一个对象。
public void set(形参列表){
this.属性名=属性名;
}
public 返回值类型 get(){
return 属性名;}
第三步:向外提供简单的操作接口。
static关键字
static修饰的统一都是静态的,都是类相关的,不需要实例化对象,直接采用“类名.”的方式进行访问。
当一个属性是一个类级别的属性的时候,建议定义成静态变量。
十二.this关键字
1.这是一个关键字,是一个引用,保存内存地址指向本身
2.this可以在实例方法中,也可以在构造方法中
3.this出现在实例方法中代表当前对象
4.this不能使用在静态方法中
5.this大部分都是可以省略的,但是在区分局部变量和实例变量的时候不可以省略
6.this()这种构造方法只能出现在第一行,表示当前构造方法调用本类的其他的构造方法。
构造方法的目的是代码重用。this存储在new()出来的对象当中,堆里面,直接指向自己的地址。

十三.继承
1.继承的作用:基本作用,子类继承父类,代码可以得到复用;
主要作用(重要):有啦继承以后才有后面得方法覆盖和多态。
2.继承的相关特性
1.B类继承A类,则称A类为父类(超类superclass,基类),B类称为子类subclass(),派生类,扩展类。
2.java中的继承只支持单继承,不支持多继承,c++中有多继承机制
3.虽然没有多继承机制,但是有时候会有间接继承的效果
4.java中规定,子类继承父类除啦构造方法不可以继承以外,剩下的都可以继承。但是私有的属性无法直接通过子类访问,可以通过间接访问。
5.java中的类没有继承任何类,则默认继承Object类,Object是根类
6.继承存在的缺点,会使不同类的耦合度高。
Object里面有一个toString方法,这个方法用来输出引用的“类名@地址”可以通过覆盖这个方法输出自己想输出的东西。
System.out.println()这个System就是类名,直接类名.访问out,则out是一个静态变量,然后System.out返回一个对象,然后在调用这个对象的println()方法。

十四.方法的覆盖
1.父类的方法已经完全不能满足子类的需求的时候就要使用方法覆盖。
2.方法覆盖的条件
1.有继承关系的两个类;
2.具有相同 的方法名,返回值类型,形式参数列表;
3.访问权限不能更低;
4.抛出的异常不能更多
5.私有方法不能覆盖,静态方法不谈覆盖(静态方法针对整个类,没有意义)
3.方法重载和方法覆盖的区别:
1.方法重载在同一个类里面;方法覆盖在两个具有继承关系的类里面;
2.方法重载是一个类中,方法名相同,形参列表不同;方法覆盖发生在具有继承关系的父子类中,并且重写以后的方法必须与之前的方法一致:方法名一致,返回值类型一致(基本返回值类型必须一致,但是引用访问类型可以不一样,可以直接返回比他小的类)只能变得更小,参数列表一致;

十五.多态的基础语法
1.向上转型和向下转型的概念
class Animal{}
class Dog extends Animal{}
子-------------父(upcasting)向上转型
Animal a= new Dog();
自动类型转换
父-------------子(downcasting)向下转型
Animal a=new Dog();
Dog b=Dog(a);
强制类型转换;需要添加强制类型转换符。
什么时候需要向下转型:当调用子类特有的方法的时候;
向下转型的时候会有风险(出现ClassCastException)类型转换异常;
向下转型的时候通常涉及一个运算符instanceof 用来动态判断引用的对象是不是这个类的,返回true或者false。如果是这个类的然后可以转换指定类。
2.多态的定义
多种形态,多种状态,编译和运行都有不同的状态;
编译时期叫做静态绑定;如果是向上转型,编译的时候就会找到父类的方法,然后绑定父类的方法;
运行的时候叫做动态绑定;实际运行的时候具体看执行的是哪一个实例的方法;
多态的典型代码:父类型的引用指向子类型的对象。(java中允许这样书写)
3.多态在开发中的作用(重要)
class Pet{}
class Dog extends Pet{}
class Cat extends Pet{}
public class Master{
public void feed(Dog d){}
public void feed (Cat c){}
}
代码这样写,耦合度很高,每增加一种宠物就得重新定义一个方法,耦合度太高,扩展性太差;
如果写成这样public void feed (Pet pet){
pet.eat();
},这样代码的扩展性好;
1.降低程序的耦合度,提高程序的扩展力;面向抽象编程,不介意面向具体编程。
软件开发原则OCP原则(对扩展开放,对修改关闭)
十五:super关键字
1.super能出现在实例方法中和构造方法中。
2.super的语法是:
super.或者super()
3.super不能使用在静态方法中
4.super.大部分的时候是可以省略的,但是如果父类和子类具有同名属性的时候,或者同样的方法的时候,想在子类中访问父类的,super.不能省略
5.super()只能出现在构造方法的第一行,通过当前的构造方法区调用“父类”中的构造方法,目的是:创建子类对象的时候,先初始化父类特征。
super的使用:
super.属性名(访问父类的属性)
super.方法名(实参)(访问父类的方法)
super(实参)(调用父类的构造方法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值