day-1-3-3

继承

继承就是子类继承父类的特性和行为,使得子类对象(实例)具有父亲的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性的继承父类。

继承是is-a的相互关系

继承的优点
  • 将所有子类的共同属性放入父类,实现代码共享,避免重复,提高开发效率
  • 可以使得修改扩展继承而来的实现比较简单
继承的缺陷
  • 父类变,子类就必须变
  • 继承破坏了封装,对于父类而言,他的实现细节对于子类来说都是透明的
  • 继承是一种强耦合性关系
特殊关键字
包package

包是类或接口的容器,是一个用于避免命名冲突的名空间,是一个逻辑命名的概念,与具体的物理位置无关在具体的实现中,包名称经常和目录名称对应

什么是包
  • 包是类的组织方式,提供名空间和访问控制
  • 类似于文件系统的组织
声明包中的类package

语法:package包名称

  • 声明包要求是源代码文件的第一个语句,包定义之前可以添加注释信息

  • 程序中最多只能有一条package语句,没有包定义的源代码文件成为默认包中的一部分

  • 包的命名规则:

    • 全小写
    • 使用域名反转的方式定义
包的作用
  • 包能将相关的源代码文件组织在一起
    • com.yanan.bao其中存放操作数据相关的类文件
    • com.yanan.biz存放相关的业务类文件
  • 包减少了名称冲突带来的问题
  • 可以使用package指明源文件中的类属于哪个具体的包
包的使用
  • 如果其他人想使用包中类,则需要使用全名
import java.util.Date;
public class A{
public static void main(String[] args){
Date now=new Date(); //使用类的简称Date,而不是全名称java.util.Date
	}
}
//用法2:全称
java.util.Date now=new java.util.Date(); //不需要import
  • 为了简化书写,Java提供了import语句: import package_name.*;
import java.util.*;
//使用java.util包中的所有类都不需要再使用import java.util.类名
  • 引入包中的某一个类:import java.util.ArrayList;
引入包import
  • Java缺省引入的包为java.lang
System.out.println("显示输出");//不需要import java.lang.System

//同包中的其它类不需要导入
package com.yan;
public class A{}

package com.yan;
public class B{
	public void pp(){
		A a=new A1(); //不需要import com.yan.A
	}
}
  • 引入包中的类: import 包名称.类名称;例如import java.util.Date;
  • 引入整个包; import 包名称.* ;例如 import java.util.* ;
  • 不引入包而是用类,则需要是用类的全名: 包名.类名,例如java.util.Date dd=new java.util.Date();
包说明

package-info.java可以描述一个包的作用

//这是一个测试包
package com.yan.test;

package-info中不能定义public和private的类,但是可以定义friendly的类及包常量,提供给统一包下面 的类进行共享

package com.yan.a;
import lombok.Data;

class Constants{
	public static final String NAME="Yanjun";
}

@Data
class Teacher{ //包中的类可以直接使用
	private String className;
}
练习

1、猜数字游戏

  • 需要记录猜数的整个过程
  • 根据猜测的次数进行评价
import java.util.Scanner;

public class test {
	private int tmp = 0;
	private boolean flag = false;
	private int[] arr = new int[15];

	public void Game(int num) {
		Scanner sc = new Scanner(System.in);
		while (tmp < 15) {
			System.out.println("第" + (tmp + 1) + "次猜数--输入-1退出");
			int guessNum = sc.nextInt();
			if (guessNum == -1) {
				System.out.println("退出成功");
				return;
			}
			if (guessNum > num) {
				System.out.println("猜大了");
				arr[tmp] = guessNum;
				tmp++;
			} else if (guessNum < num) {
				System.out.println("猜小了");
				arr[tmp] = guessNum;
				tmp++;
			} else {
				tmp++;
				flag = true;
				System.out.println("你猜对了,用了" + tmp + "次");
				break;
			}
		}
		PinJia();
		his();
		sc.close();
	}

	public void PinJia() {
		if (tmp < 5) {
			System.out.println("你真棒");
		} else if (tmp < 10) {
			System.out.println("继续努力");
		} else if (tmp < 15) {
			System.out.println("你和猪差不多");
		} else {
			System.out.println("你真是个猪");
		}
	}

	public void his() {
		System.out.println("------------------------------");
		if (flag) {
			System.out.println("恭喜你猜对了");
		}
		for (int i = 0; i < tmp; i++) {
			System.out.println("第" + (i + 1) + "次猜的值为" + arr[i]);
		}
	}

}
public static void main(String[] args) {
		test gu = new test();
		gu.Game(123);
	}

2、计算圆的面积和周长,输入半径值

private int r;
private final double PI = 3.1415;

public double getMianJi(int r) {
	return r * r * PI;
}

public String show() {
	return "周长为" + getZhouChang(r) + ",面积为" + getMianJi(r);
}

public void setR(int r) {
	this.r = r;
}

// ------------------------------

public double getZhouChang(int r) {
	return 2 * r * PI;
}
public static void main(String[] args) {
	cirle c = new cirle();
	c.setR(5);
	System.out.println(c.show());
}

3、请定义一个交通工具Vehicle的类,其中有:

  • 属性:速度(speed),车的类型(type);方法:移动(move()),设置速度(setSpeed(doubles)),加速speedUp(double s),减速speedDown(double s)。
  • 最后在测试类Vehicle中的main()中实例化一个交通工具对象,并通过构造方法给它初始化speed,type的值,并且打印出来。另外,调用加速,减速的方法对速度进行改变。
private double speed;
private String type;

String speedUp(double s) {
	return "对车进行加速" + s + ",现在的车速是" + (speed + s) + "km/h";
}

String speedDown(double s) {
	return "对车进行加速" + s + ",现在的车速是" + (speed - s) + "km/h";
}

String move() {
	return "车的牌子是" + type + ",现在的速度是" + speed + "km/h";
}

// ----------------------------
public void setSpeed(double speed) {
	this.speed = speed;
}

public void setType(String type) {
	this.type = type;
}
public static void main(String[] args) {
	Vehicle v1 = new Vehicle();
	v1.setSpeed(60);
	v1.setType("路虎");
	System.out.println(v1.move());
	System.out.println(v1.speedUp(20));
	Vehicle v2 = new Vehicle();
	v2.setSpeed(80);
	v2.setType("奔驰");
	System.out.println(v2.move());
	System.out.println(v2.speedDown(20));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值