javaOOP基础总结

javaOOP基础总结

类和对象

1.类和对象的关系

1.类

简单来说:类是抽象的,是对对象的抽象。

具体来说:类是对现实生活中一类具有共同特征的事物的抽象,实质是一种复杂的数据类型,不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。

2.对象

简单来说:对象也是抽象的,是对客观事物的抽象。又是具体的,是类实例化的结果。

具体来说:对象是人们要进行研究的任何具体事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。

3.类是对象的概括,对象是类的具体体现

根据一类对象进行概括,将对象的特征概括为属性,将对象的行为概括为方法,将这一类对象用一个类表示 — 类是对象的概括/抽取,通过new关键字来创建这个对象,然后可以给对象中的属性赋值,也可以调用方法

2.成员变量和局部变量

局部变量和成员变量

1.定义的位置不一样:

1) 局部变量:在方法的内部
2) 成员变量: 在方法的外部,直接写在类当中

2.作用范围不一样:

1) 局部变量:只有方法当中才可以使用,出了方法就不能再用了
2) 成员变量:整个类全都可以使用

3.默认值不一样:

1) 局部变量:没有默认值,如果想要使用,必须手动进行赋值
2) 成员变量:如果没有赋值,会有默认值,规则和数组一样。

4.内存位置不一样:

1) 局部变量:位于栈内存
2) 成员变量:位于堆内存

5.生命周期不一样:

1) 局部变量随着方法进栈而诞生,随着方法的出栈而消失
2) 随着对象的创建而诞生,随着对象被垃圾回收而消失

3.构造方法

java可以向C#一样,通过无参或带参数的构造方法(Constructor)完成赋值的初始化

在Penguin类中增加一个无参的构造方法Penguin(),如下

/**
*	宠物企鹅类,测试无参构造方法
*/
public class Penguin{
   
    String name = "无名氏";			//昵称
    int health = 100;				  //健康值
    int love = 0;					  //亲密度
    String sex = "Q仔";				 //性别
/**
*	无参构造方法
*/
public Penguin(){
   
        name = "楠楠";
        love = 20;
        sex = "Q妹";
        System.out.println("执行构造方法");
    }
/**
*	输出企鹅的信息
*/
public void print(){
   
    System.out.println("宠物的自白:\n我的名字叫" + this.name
                          + ",健康值是" + this.health + ",和主人的亲密度是"
                          + this.love + ",性别是" + this.sex + "。");
	}
/**
*	测试无参构造方法的使用
*/
public static void main(String[] args){
   
    Penguin pgn = null;
    pgn = new Penguin();
    pgn.print();
}
}

Penguin()方法就是Penguin类的构造方法,构造方法是一个特殊的方法,当没有Penguin()方法时,系统会提供一个空的Penguin()方法。

构造方法的名称和类名相同,没有返回值类型,构造方法的主要作用就是在创建对象时执行一些初始化操作,比如给成员属性赋初始值。

1.方法重载(overload)
	如何定义重载。方法的重写和重载只有一个字不同,很多初学者认为这两者十分相似,其实不然。方法重载是让类以统一的方式处理不同类型数据的一种手段。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法,这就是多态性。

所谓方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同。方法的重载在实际应用中也会经常用到。不仅是一般的方法,构造方法也可以重载。

2.方法重写

​ 如何定义重写:在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。重写体现了Java优越
性,重写是建立在继承关系上,它使语言结构更加丰富。在Java中的继承中,子类既可以隐藏和访问父类的方法,也可以覆盖继承父类的方法。在Java中覆盖继承父类的方法就是通过方法的重写来实现的。

​ 所谓方法的重写是指子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型。这样,就可以实现对父类方法的覆盖。

1.重写规则
  • 必须在同一个类里
  • 方法名相同
  • 参数列表(方法参数的个数或参数类型)不同
  • 与方法返回值和方法修饰符没有任何关系

在使用this调用自身的其他构造方法时,只能作为第一条语句

2.在重写方法时,需要遵循以下的规则:

1.父类方法的参数列表必须完全与被子类重写的方法的参数列表相同,否则不能称其为重写而是重载。

2.父类的返回类型必须与被子类重写的方法返回类型相同,否则不能称其为重写而是重载。

3.Java中规定,被子类重写的方法不能拥有比父类方法更加严格的访问权限。

3.方法重写与方法重载的区别
区别点 重载 重写
英文 Overloading Overiding
定义 方法名称相同,参数的类型或个数不同 方法名称、参数类型、返回值类型全部相同
方法名称相同,参数的类型或个数不同 被重写的方法不能拥有更严格的权限
范围 发生在一个类中 发生在继承类中
4.结束语

在面向对象程序设计的思想中,类的继承和多态性主要就是体现在子类重写父类的方法。而构造方法的重载作为方法重载的一个典型特例,可以通过重载构造方法来表达对象的多种初始化行为。灵活的运用方法重写与方法重载,不仅能减少编码的工作量,也能大大提高程序的可维护性及可扩展性。用好重写和重载
可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般。

4.this关键字

public Person(String name, int age, String sex) {
   
    //有参构造
	this.name = name;	//区别参数和成员变量
	this.age = age;
	this.sex = sex;
}
this :表示对本类对象的引用 

this(); 调用无参构造方法,必须写在构造方法中的第一行

5.static关键字

封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

封装的步骤

1,私有化属性

private String name;
private int age;

2,提供的公共方法来实现对隐藏信息的操作和访问(getter/setter)

public String getName() {
   
		return name;
	}

	public void setName(String name) {
   
		this.name = name;
	}

	public int getAge() {
   
		return age;
	}

	public void setAge(int age) {
   
		this.age = age;
	}

3,在方法中加入控制语句

public void setAge(int age) {
   
		if(age<=0)
			this.age=2;
		this.age = age;
	}

封装

1、方法、继承都是封装的一种体现,private(私有的)也是封装的一个体现。被private修饰的成员变量只能在本类中使用,外部不能直接通过对象属性改变。获取和改变需要提供设置器(访问接口|访问方法)和访问器来进行操作。

特点:
1、可以隐藏内部细节,对外提供公共访问方式。

		2、提高安全性,提高代码的复用性。

2、这种多个封装的模板类统称之为javabean,模板类需要满足的一些规则

​ 1)类是公共的

​ 2)私有的属性

​ 3)提供公有的访问方式 set、get

​ 4)最好定义一个空构造

3、四种权限修饰关键字

​ 1)private:只能被本类访问

​ 2)default: 默认属性,并且不能写出来 只要你没有用其他修饰默认就是default

​ 能被同包目录下访问

​ 3)protected:除了能被同包访问,还可以给不同包下的字类访问

​ 4)public:公共的 可以被其他包访问

4、注意:类名只能被 public和default修饰


继承

1,继承(extends)

​ extends:延伸 拓展

继承:子类继承父类,拥有父类的属性和方法。

public class Animal {
   
    public String name;
    public String sex;
}

class Dog extends Animal{
   

}
Dog dog = new Dog();

特点:

​ 1,继承父类的属性和方法

​ 2,不能继承父类的

​ private 修饰的属性和方法

	父类的构造方法

	子类和父类不在同一包下,使用默认的访问修饰符

​ 3,java中的类只有单继承,一个子类只有一个父类。但是可以多重继承

​ 4,一个类如果没有extends继承,默认继承Object。Object是所有类的父类

​ 5,父类又叫超类,基类。子类又叫派生类。

2,方法的重写

当父类的方法满足不了子类的需求,这个时候需要子类重写父类的方法

特点:方法名和父类的方法名一致,返回值类型一致,参数列表一致,

​ 子类方法的访问权限不能比父类的更严格。

​ 子类的返回值可以是父类返回值对象的子类对象

public float eat(int a){
   

}

public int eat(int b){
   

}
3,super关键字
super:表示对父类对象的引用

​ super(); 调用父类的无参构造 必须写在构造方法中的第一行

​ super只能出现在子类的方法和构造方法中
​ super调用构造方法时,只能是第一句
​ super不能访问父类的private成员

4,访问修饰符
访问修饰符 本类 同包 子类 其他
private
默认 不写
protected
public

private - 默认 - protected - public

5,重载(overload)和重写(override)的区别
位置 方法名 参数表 返回值 访问修饰符
方法重写<
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
开发阳光旅行网app中用户下单功能,可实现用户添加订单并完善出行人信息、修改订单,删除订单以及打印行程信息等功能。 具体功能要求如下: (1)显示系统主菜单 包括添加出行订单、查看我的出行订单、修改订单信息、删除出行人、查看行程、退出系统6项功能,其他功能本项目不做要求,当用户选择功能编号后可进入执行相应功能。执行结果如图1所示。 图1 主菜单 (2)添加出行订单 填写出行日期、联系人手机号码、循环录入出行人信息。 出行人信息包括:  出行人类别:成人、儿童(1.2m以下)、老人(65岁以上)  姓名  年龄(如选择类别为老人,输入年龄不足65岁的,显示提示信息“对不起,老人订单年龄需为65岁以上!”)  如果是儿童,需确定是否占床 每成功录入一条出行人信息后,显示出其详细信息,并计算出行金额。定价如下:  成人:2000元/人  儿童:免费,如需占床另加30元  老人:半价,即1000元/人 当一条出行人信息录入完毕后,提示“是否继续添加(Y/N)?”,此处不区分大小写,当输入y或Y时继续录入下一条,否则显示订单信息,包括:  出行日期  联系人手机号码  订单总金额(即所有出行人定单金额之和) 最后显示主菜单。执行效果如图2所示。 图2 添加出行订单 (3)查看我的出行订单信息 查看我的出行订单:查看所录入的订单信息。包括出行日期、联系人手机号码、所有出行人信息,运行效果如图3所示。 图3 查看我的出行订单 (4)修改行程信息 可修改出行日期、联系人手机号码,要求手机号码必须为11位,否则抛出异常信息,提示“手机号码必须为11位”,运行效果如果4所示。 图4 手机号码不是11位 正确修改后,显示修改后的信息,并提示“修改成功!”。如图5所示。 图5 修改订单成功 (5)删除出行人 填写要删除的出行人姓名,执行删除操作,删除成功后给出提示“删除成功!”,如图6所示。如果输入姓名错误,则提示“对不起,定单中不包含此游客信息!”如图7所示。 图6 删除出行人成功 图7 删除出行人失败 (6)查看行程 显示本次旅行行程信息。即读取“旅游行程.txt”文件(素材提供),显示在控制台。运行效果如图8所示。 图8 查看行程 (7)退出系统 退出当前系统,显示“欢迎下次再来。”如图9所示。 三、要求与实现步骤 (一)不使用数据库,使用对象和集合存储数据 (二)定义实体类(成人订单、儿童订单、老人订单),儿童订单、老人订单为成人订单的子类。实体类至少包含但不局限于以上3个。 (三)在各实体类中均需实现各自计算订单价格、显示订单信息的方法,使用方法的重写。 (四)定义工具类,实现查看我的出行订单、添加订单、修改行程信息、删除出行人、查看行程等方法。需使用到对象传参。 (五)使用泛型集合存储所有出行人信息,使用集合的遍历实现查看订单信息、统计订单总金额、删除出行人等功能。 (六)显示信息时,只有儿童出行人需显示是否占座,需使用面向对象多态实现。 (七)修改行程信息时,当手机号码录入错误时需使用throw手动抛出异常。 (八)使用I/O技术实现文件的读取功能,将文本文件“行程信息.txt”中的内容显示到控制台。 (九)定义测试类,完成项目功能菜单以及整体流程,调用相应方法实现具体功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值