JAVA进阶2
间歇性混吃等死,持续性踌躇满志系列-------------第2天
1、父类子类继承(注:一个JAVA源文件中只能有一个public类,public 类的名字必须和这个编译单元的文件名完全相同,包括大小
写。)
public class Bird{
String color ="red"; //颜色
String skin = "羽毛"; //皮毛
}
class Pigeon extends Bird{
public static void main(String[] args){
Pigeon pigeon = new Pigeon();
System.out.println(pigeon.color);
System.out.println(pigeon.skin);
}
}
运行结果图

2、经理和员工的差异(子类与父类案例)
import java.util.Date; //导入java.util.Date类
class Employee{
private String name; //员工的姓名
private double salary; //员工的工资
private Date birthday; //员工的生日 public String getName(){ //获取员工的姓名
return name;
}
public void setName(String name){ //设置员工姓名
this.name = name;
}
public double getSalary(){ //获取员工的工资
return salary;
}
public void setSalary(double salary){ //设置员工工资
this.salary = salary;
}
public Date getBirthday(){ //获取员工生日
return birthday;
}
public void setBirthday(Date birthday){ //设置员工生日
this.birthday = birthday;
}
}
class Manager extends Employee{
private double bonus; //经理的奖金
public double getBonus(){ //获取经理的奖金
return bonus;
}
public void setBonus(double bonus){ //设置奖金
this.bonus = bonus;
}
}
public class Test{
public static void main(String[] args){
Employee employee = new Employee(); //创建Employee对象并为其赋值
employee.setName("c#");
employee.setSalary(99);
employee.setBirthday(new Date());
Manager manager = new Manager(); //创建Manager对象并为其赋值
manager.setName("hello");
manager.setSalary(300);
manager.setBirthday(new Date());
manager.setBonus(200);
System.out.println("员工的姓名:"+employee.getName());
System.out.println("员工的工资:"+employee.getSalary());
System.out.println("员工的生日:"+employee.getBirthday());
//输出经理和员工的属性值
System.out.println("经理的姓名:"+manager.getName());
System.out.println("经理的工资:"+manager.getSalary());
System.out.println("经理的生日:"+manager.getBirthday());
System.out.println("经理的奖金:"+manager.getBonus());
}
}
运行结果图

3、多态(方法的重载,重载的方法之间并不一定必须有联系,但为了提高程序可读性,一般只重载功能相似的方法。)
注:在进行方法重载时,方法返回值的类型不能作为区分方法的标志。
public class Calculate{
final float PI = 3.14159f; //定义一个用于笔试圆周率的常量PI
//求圆的面积
public float getArea(float r){ //定义一个用于计算面积的方法getArea()
float area = PI*r*r;
return area;
}
//求矩形的面积
public float getArea(float l,float w){
float area = l*w; //重载getArea()方法
return area;
}
//画任意形状的图形
public void draw(int num){ //定义一个用于画图的方法draw()
System.out.println("画"+num+"个任意形状的图形");
}
public void draw(String shape){ //重载draw()方法
System.out.println("画一个"+shape);
}
public static void main(String[] args){
Calculate calculate = new Calculate(); //创建Calculate类的对象并为其分配内存
float l = 20;
float w = 40;
float areaRectangle = calculate.getArea(l,w);
System.out.println("求长为"+l+"宽为"+w+"的矩形的面积是:"+areaRectangle);
float r = 7;
float areaCirc = calculate.getArea(r);
System.out.println("求半径为"+r+"的圆的面积是:"+areaCirc);
int num = 10;
calculate.draw(num);
calculate.draw("三角形");
}
}
运行结果图

4、计算几何图形的面积(使用抽象方法计算面积)
abstract class Shape{
public String getName(){ //获得图形的名称
return this.getClass().getName();
}
public abstract double getArea(); //获得图形的面积
}
class Circle extends Shape{
private double radius;
public Circle(double radius){ //获得圆形的半径
this.radius = radius;
}
public double getArea(){ //计算圆形的面积
return Math.PI*Math.pow(radius,2);
}
}
class Rectangle extends Shape{
private double length;
private double width;
public Rectangle(double length,double width){
//获得矩形的长度和宽
this.length = length;
this.width = width;
}
public double getArea(){
return length*width;
}
}
public class Test{
public static void main(String[] args){
//创建圆形的对象并将半径设置成10
Circle circle = new Circle(10);
System.out.println("图形的名称是:"+circle.getName());
System.out.println("图形的面积是:"+circle.getArea());
//创建矩形的对象并将长和宽设置成2
Rectangle rectangle = new Rectangle(2,2);
System.out.println("图形的名称是:"+rectangle.getName());
System.out.println("图形的面积是:"+rectangle.getArea());
}
}
运行结果图

5、简单的汽车销售市场
abstract class Car{
//用来描述汽车的信息
public abstract String getInfo();
}
class BMW extends Car{
//用来描述汽车的信息
public String getInfo(){
return "BMW";
}
}
class Benz extends Car{
//用来描述汽车的信息
public String getInfo(){
return "Benz";
}
}
class CarFactory{
public static Car getCar(String name){
//如果需要BMW则创建BMW对象
if(name.equalsIgnoreCase("BMW")){
return new BMW();
}else if(name.equalsIgnoreCase("Benz")){ //如果需要Benz则创建Benz对象
return new Benz();
}else{
//暂时不支持其他车型
return null;
}
}
}
public class Customer{
public static void main(String[] args){
System.out.println("顾客要购买BMW");
//顾客要购买BMW
Car bmw = CarFactory.getCar("BMW");
//提取BMW
System.out.println("提取汽车:"+bmw.getInfo());
System.out.println("顾客要购买benz");
//顾客要购买BMW
Car benz = CarFactory.getCar("benz");
//提取BMW
System.out.println("提取汽车:"+benz.getInfo());
}
}
运行结果图

6、抽象类(抽象方法不能使用private或static关键字进行修饰)
abstract class Fruit{ //定义抽象类
//定义颜色成员变量
public String color;
//定义构造方法
public Fruit(){
color = "red";
}
//定义抽象方法
public abstract void harvest();
}
class Apple extends Fruit{
public void harvest(){
//输出字符串:"苹果已经收获!"
System.out.println("苹果已经收获!");
}
}
class Orange extends Fruit{
public void harvest(){
//输出字符串:"桔子已经收获!"
System.out.println("桔子已经收获");
}
}
public class Farm{
public static void main(String[] args){
System.out.println("调用Apple类的harvest()方法的结果:");
//声明Apple类的一个对象apple,并为其分配内存
Apple apple = new Apple();
apple.harvest();
System.out.println("调用Orange类的harvest()方法的结果:");
//声明Orangle类的一个对象orangle,并为其分配内存
Orange orange = new Orange();
orange.harvest();
}
}
运行结果图

JAVA进阶2的更多相关文章
- Java 进阶 hello world! - 中级程序员之路
Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...
- Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式
原创文章,同步发自作者个人博客,http://www.jasongj.com/java/nio_reactor/ Java I/O模型 同步 vs. 异步 同步I/O 每个请求必须逐个地被处理,一个请 ...
- Java线程间通信方式剖析——Java进阶(四)
原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...
- Java进阶(三)多线程开发关键技术
原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...
- 当我们说线程安全时,到底在说什么——Java进阶系列(二)
原创文章,同步发自作者个人博客,转载请以超链接形式在文章开头处注明出处http://www.jasongj.com/java/thread_safe/ 多线程编程中的三个核心概念 原子性 这一点,跟数 ...
- Java进阶03 IO基础
链接地址:http://www.cnblogs.com/vamei/archive/2013/04/11/3000905.html 作者:Vamei 出处:http://www.cnblogs.com ...
- Java进阶01 String类
链接地址:http://www.cnblogs.com/vamei/archive/2013/04/08/3000914.html 作者:Vamei 出处:http://www.cnblogs.com ...
- 从ConcurrentHashMap的演进看Java多线程核心技术 Java进阶(六)
本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为.同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1. ...
- Java进阶(七)正确理解Thread Local的原理与适用场景
原创文章,始自发作者个人博客,转载请务必将下面这段话置于文章开头处(保留超链接). 本文转发自技术世界,原文链接 http://www.jasongj.com/java/threadlocal/ Th ...
- Java进阶(四十七)Socket通信
Java进阶(四十七)Socket通信 今天讲解一个 Hello Word 级别的 Java Socket 通信的例子.具体通讯过程如下: 先启动Server端,进入一个死循环以便一直监听某端口是 ...
随机推荐
- Python之推导式、生成器表达式
l = [i for i in range(10)] print(l) l1 = ['选项%s'%i for i in range(10)] print(l1) 1.把列表解析的[]换成()得到的就是 ...
- 第十六节,卷积神经网络之AlexNet网络实现(六)
上一节内容已经详细介绍了AlexNet的网络结构.这节主要通过Tensorflow来实现AlexNet. 这里做测试我们使用的是CIFAR-10数据集介绍数据集,关于该数据集的具体信息可以通过以下链接 ...
- C connect实现Timeout效果(Windows)
int SocketClient::connectTimeOutForWin(SOCKET &connect_fd, const int &timeout, const sockadd ...
- php 在服务器端开启错误日志记录方法
修改php.ini设置,或者通过方法 ini_set设置以下项即可 1.打开error_reporting设置: 如 error_reporting= E_ALL 2. log_errors=On ...
- es6基础知识总结(附加)
附加: 字符串扩展: 1. includes(str) : 判断是否包含指定的字符串2. startsWith(str) : 判断是否以指定字符串开头3. endsWith(str) : 判断是否以指 ...
- Vue.js 循环语句
循环使用 v-for 指令. v-for 指令需要以 site in sites 形式的特殊语法, sites 是源数据数组并且 site 是数组元素迭代的别名. v-for 指令: v-for 可以 ...
- oracle 12C版本的下载安装
首先 去官网下载自己需要的oracle对应的操作系统的版本 接受协议后可下载 1 下载解压好后 进入主目录 进行安装 在配置安全更新中把我希望通过My Oracle Support接收安全更新前面的 ...
- centos 7.4 安装gitlab
centos 7.4 安装gitlab #curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/scrip ...
- bzoj千题计划312:bzoj2119: 股市的预测(后缀数组+st表)
https://www.lydsy.com/JudgeOnline/problem.php?id=2119 题意:将给定数组差分后,求ABA形式的字串个数,要求|B|=m,|A|>0 1.后缀数 ...
- Java基础高级部分(一)
1. 集合部分 1.1 HashMap排序 package cn.Douzi.hashMap01; import java.util.ArrayList; import java.util.Colle ...