Java OOP

Java OOP

第一章 对象和封装

1. Java 中的命名规则

Java 包名:

​ <1> Java 包名首字母不能小写

​ <2>不能够以[.]开头或结尾

​ <3>组成:由字母和数字组成,只能包含的特殊字符为:_,$,不能以数字开头

Java 类名:

​ <1>首字母大写,帕斯卡命名法

​ <2>必须要和文件名一致

​ <3>组成:由字母和数字组成,只能包含的特殊字符为:_,$,不能以数字开头

​ <4>,每个单词首字母要大写

区别
Java属性方法
C#字段(属性)方法

示例:

package ShiLi;

public class Penguin extends Pet {
	private String sex;//性别
	public Penguin(String name,String sex) {
		super(name);
		this.sex=sex;
	}
	public String getSex() {
		return sex;
	}
	/**
	 * 重写父类的print()方法
	 */
	public void Print() {
		super.Print();
		System.out.println("性别是:"+this.sex);
	}
}

2.类的三大特性

​ 封装:就是将具体的实现步骤私有化,提供共有的名字让程序员可以操作

​ 继承:就是子类继承父类

​ 多态:一个事物的多种形态

Java中常见的关键字:

​ final:常量修饰符

​ 1.类似于c#的 constant ,只能够初始话一次值

​ 2.修饰方法: 方法不能够重写了

​ 3.修饰类: 类禁止被继承了

示例:

public class Studne1 {
	//构造函数
	public Studne1() {}
	public Studne1(String name,int age) {
		this.name=name;//----这里就报错了
		this.age=age;
	}
	private final String  name ="";//姓名
	private int age;//年龄
	public void ShowJieShao() {
		if(age>=18) {
			System.out.println("该学员的年龄符合!");
		}else {
			System.out.println("该学员的年龄不符合!");
		}
		System.out.println("我的名字是:"+this.name+"今年的年龄是:"+this.age);
	}

static:静态

1.特点:

​ 静态成员属于类,也可以通过对象名去访问

区别C#:

  1. C#中static成员只能够通过类名点

  2. Java中的还可以通过对象名,但建议还是使用类名(原因:static成员属于类成员而不是对象成员)

  3. 修饰的成员 字段,方法,但是属于类,对象名,但建议还是使用类名

    this.

    当前类的对象引用

    super

    类似于C#base,调用父类成员

    示例:

    package ShiLi;
    
    public class Penguin extends Pet {
    	private String sex;//性别
    	public Penguin(String name,String sex) {
    		super(name);
    		this.sex=sex;
    	}
    	public String getSex() {
    		return sex;
    	}
    	/**
    	 * 重写父类的print()方法
    	 */
    	public void Print() {
    		super.Print();
    		System.out.println("性别是:"+this.sex);
    	}
    }
    

    3.构造函数

    1.作用:用来new对象的,随便给成员变量赋值

    2.语法

    ​ 访问修饰符 类名(形参)<可有可无>{

    }

    3.分类

    根据参数个数

    有参 无参

    根据显示方式

    隐式:无手写构造函数,自己特有一个构造函数

    显式:自己手写了构造函数

    示例:

    public class Bus extends MotoVenicle {
    
    	private int seatCount;//座位数
    	public Bus(String noString,String brand,int seatCount) {
    		super(noString,brand);
    		this.seatCount=seatCount;
    	}
    	public int getSeatCount() {
    		return seatCount;
    	}
    	public void seatCount(int seatCount) {
    		this.seatCount=seatCount;
    	}
    	/**
    	 * 计算价格
    	 */
    	@Override
    	public int calRent(int days) {
    		if(seatCount<=16) {
    			return days*800;
    		}else {
    			return days*1500;
    		}
    	}
    

    重载

    ​ 特点:

    ​ 1.在同一个类中,具有相同的方法名

    ​ 2.有不同的参数,可是个数不一样

    访问修饰符

    public任何地方都可以访问,本类子类直接访问,其他类 通过对象名
    protected本类,子类【同包,不同包】可以访问<
    friendly本类,同包子类可以直接访问只有本类可以访问
    private只有本类可以访问

第二章 继承

1.含义

​ 子类继承父类

2.语法

访问修饰符 子类类名 extends 父类类名{
    //父类的抽象方法
}

Java 中通过关键字extends来实现,C#中使用 : 特殊符号来实现,修饰符如果是public,则该类整个项目中可见,private只有本类可以使用

在Java中,所有的Java类都直接或间接地继承了。Object类是所有Java类的祖先。在定义一个类时,如果没有使用extends关键字,那么这个类直接继承Object类。

1.继承关系中的重写

子类重写父类的构造函数,先调用父类的构造函数,在使用本类自己的构造函数

方法的重写:

特点: 1.具有相同的方法名

​ 2.重写方法之间的参数列表一致

​ 3.父类的重写方法的访问修饰符必须小于子类的访问修饰符

​ 4.父类重写方法的返回值类型必须大于子类的返回值类型

​ 5.父类重写方法的异常要大于子类的异常

2.super的使用

​ 1.super必须要出现在子类的方法或者构造函数中的第一行

​ 2.可以访问父类的非private的属性,方法,及构造函数

​ 3.super类似于C#的base 用来引用父类的成员

访问修饰符:

访问修饰符本类同包子类(不同包)不同包
public
protected
friendly
private

3.抽象类和抽象方法

特点:

​ 1.通过关键字abstra修饰

​ 2.在抽象类中,可以有抽象方法,也可以有非抽象方法

​ 3.抽象类不能够被示例化,抽象类的抽象方法只能声明,不能够有具体的实现方式

示例:

public abstract class MotoVenicle {
	private String noString;
	private String brand;
	/**
	 * 无参构造方法
	 */
	
	public MotoVenicle() {}
	public MotoVenicle(String noString,String brand) {
		this.noString=noString;
		this.brand=brand;
	}
	public String getNo() {
		return noString;
	}
	public String getBrand() {
		return brand;
	}
	/**
	 * 抽象方法
	 */
	public abstract int calRent(int days);
}

第三章 多态

含义:一个事物的多种形态

1.多态的实现方式

​ 重载:

​ 特点:1.在同一个类中

​ 2.具有相同的方法名,但参数类型不同,或者参数的个数不相同

​ 调用规则:

​ 根据参数类型来调用,或者参数个数来调用

​ 重写:

​ (1)虚方法:

​ 特点;1.在两个拥有继承关系的类中

​ 2.方法名相同,参数类型,参数个数相同,父类的方法使用关键字vital修饰,拥有方法体,子类必须实现父类的虚方法,子类使用override修饰

​ (2)抽象方法:

​ 特点:1.在两个拥有继承关系的类中,父类必须是抽象类

​ 2.方法名相同,参数类型,参数个数相同,父类的方法使 用关键字abstract修饰,只需要声明,不能够拥有方法体,子类必须实现父类的虚方法,子类使用override修饰,除非子类也是抽象方法,不然都要实现虚方法

示例:

public class Aurk extends Father {

	@Override
	public void eat() {
		System.out.println("来自美国的约翰,喜欢吃披萨");

	}

	@Override
	public void Wang() {
		System.out.println("美国的约翰喜欢打橄榄球!");

	}

}

2.向上向下装换

子类到父类的转换(向上转型)

将一个父类的引用指向一个子类对象,自动进行类型转换,此时通过父类引用变量无法调用子类特有的方法

父类到子类的转换(向下转换)

将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转换。此时必须进行强制类型转换。

3.instanceof运算符

作用:

instanceof运算符来进行类型的判断

语法:

对象 instanceof 类或接口

该运算符用来判断一个对象是否属于一个类或者实现了一个接口,结果为true或false。在强制类型转换之前通过instabnceof运算符检查对象的真实类型,再进行相应的强制类型转换,这样就可以避免类型转换异常,从而提高代码的代码量。

示例:

public class Master {
	//构造方法
	public Master() {}

	//调用父类方法
	public void Showdy(Father father) {
		father.eat();//吃
		father.Wang();//玩
	}
	
	//判断客人
	public Father Ker(int i) {
		Father father=null;//父类
		if (i==1) {
			father=new Chinane();
		}if (i==2) {
			father=new Aurk();
		}
		return father;
	}
	
	//判断吃还是玩
	public void Type(Father father) {
		if(father instanceof Chinane) {
			Chinane chinane=(Chinane) father;
			chinane.Wang();
		}
		if(father instanceof Aurk) {
			Aurk aurk=(Aurk) father;
			aurk.Wang();
		}
	}

第四章 接口

含义:

接口是一套规范,只要是满足这个规范的设备,就可以将它们组装到一起,从而实现该设备的功能

语法:

接口

访问修饰符 interface 接口名 extends 接口1,接口2,..{
    //代码块
}

子类引用接口

访问修饰符 类名 implements 接口1,接口2..{
	//代码块
}

1.接口的特点

​ 1.接口不能被实例化

​ 2.成员方法: 只能是抽象方法,使用abstract修饰,默认访问修饰符是:pulic abstract

​ 3.成员变量: 只能定义静态常量,默认访问修饰发:public static final

​ 4.构造方法: 不能够有构造函数

作用:

​ 约束子类必须拥有某种行为

相同点不同点
关键字构造函数成员变量
接口都不能被实例化interface接口不能有构造函数必须是:static final
抽象类,约束子类必须实现抽象方法,除非子类也是抽象类,接口abstract抽象类可以有构造函数抽象类可以有非静态的,可以不是常量

2.类的三个关系

​ is a:本质,继承
​ has a:属于,包含关系
​ like a:像,接口

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值