JAVA进阶2
间歇性混吃等死,持续性踌躇满志系列-------------第2天
1、父类子类继承(注:一个JAVA源文件中只能有一个public类,public 类的名字必须和这个编译单元的文件名完全相同,包括大小
写。)
1 public class Bird{ 2 String color ="red"; //颜色 3 String skin = "羽毛"; //皮毛 4 } 5 6 class Pigeon extends Bird{ 7 public static void main(String[] args){ 8 Pigeon pigeon = new Pigeon(); 9 System.out.println(pigeon.color); 10 System.out.println(pigeon.skin); 11 } 12 }
运行结果图
2、经理和员工的差异(子类与父类案例)
1 import java.util.Date; //导入java.util.Date类 2 class Employee{ 3 private String name; //员工的姓名 4 private double salary; //员工的工资 5 private Date birthday; //员工的生日 6 7 public String getName(){ //获取员工的姓名 8 return name; 9 } 10 public void setName(String name){ //设置员工姓名 11 this.name = name; 12 } 13 public double getSalary(){ //获取员工的工资 14 return salary; 15 } 16 public void setSalary(double salary){ //设置员工工资 17 this.salary = salary; 18 } 19 public Date getBirthday(){ //获取员工生日 20 return birthday; 21 } 22 public void setBirthday(Date birthday){ //设置员工生日 23 this.birthday = birthday; 24 } 25 } 26 class Manager extends Employee{ 27 private double bonus; //经理的奖金 28 public double getBonus(){ //获取经理的奖金 29 return bonus; 30 } 31 public void setBonus(double bonus){ //设置奖金 32 this.bonus = bonus; 33 } 34 } 35 public class Test{ 36 public static void main(String[] args){ 37 Employee employee = new Employee(); //创建Employee对象并为其赋值 38 employee.setName("c#"); 39 employee.setSalary(99); 40 employee.setBirthday(new Date()); 41 Manager manager = new Manager(); //创建Manager对象并为其赋值 42 manager.setName("hello"); 43 manager.setSalary(300); 44 manager.setBirthday(new Date()); 45 manager.setBonus(200); 46 System.out.println("员工的姓名:"+employee.getName()); 47 System.out.println("员工的工资:"+employee.getSalary()); 48 System.out.println("员工的生日:"+employee.getBirthday()); 49 //输出经理和员工的属性值 50 System.out.println("经理的姓名:"+manager.getName()); 51 System.out.println("经理的工资:"+manager.getSalary()); 52 System.out.println("经理的生日:"+manager.getBirthday()); 53 System.out.println("经理的奖金:"+manager.getBonus()); 54 } 55 }
运行结果图
3、多态(方法的重载,重载的方法之间并不一定必须有联系,但为了提高程序可读性,一般只重载功能相似的方法。)
注:在进行方法重载时,方法返回值的类型不能作为区分方法的标志。
1 public class Calculate{ 2 final float PI = 3.14159f; //定义一个用于笔试圆周率的常量PI 3 //求圆的面积 4 public float getArea(float r){ //定义一个用于计算面积的方法getArea() 5 float area = PI*r*r; 6 return area; 7 } 8 //求矩形的面积 9 public float getArea(float l,float w){ 10 float area = l*w; //重载getArea()方法 11 return area; 12 } 13 //画任意形状的图形 14 public void draw(int num){ //定义一个用于画图的方法draw() 15 System.out.println("画"+num+"个任意形状的图形"); 16 } 17 public void draw(String shape){ //重载draw()方法 18 System.out.println("画一个"+shape); 19 } 20 public static void main(String[] args){ 21 Calculate calculate = new Calculate(); //创建Calculate类的对象并为其分配内存 22 float l = 20; 23 float w = 40; 24 float areaRectangle = calculate.getArea(l,w); 25 System.out.println("求长为"+l+"宽为"+w+"的矩形的面积是:"+areaRectangle); 26 float r = 7; 27 float areaCirc = calculate.getArea(r); 28 System.out.println("求半径为"+r+"的圆的面积是:"+areaCirc); 29 int num = 10; 30 calculate.draw(num); 31 calculate.draw("三角形"); 32 } 33 }
运行结果图
4、计算几何图形的面积(使用抽象方法计算面积)
1 abstract class Shape{ 2 public String getName(){ //获得图形的名称 3 return this.getClass().getName(); 4 } 5 public abstract double getArea(); //获得图形的面积 6 } 7 class Circle extends Shape{ 8 private double radius; 9 public Circle(double radius){ //获得圆形的半径 10 this.radius = radius; 11 } 12 public double getArea(){ //计算圆形的面积 13 return Math.PI*Math.pow(radius,2); 14 } 15 } 16 class Rectangle extends Shape{ 17 private double length; 18 private double width; 19 public Rectangle(double length,double width){ 20 //获得矩形的长度和宽 21 this.length = length; 22 this.width = width; 23 } 24 public double getArea(){ 25 return length*width; 26 } 27 } 28 public class Test{ 29 public static void main(String[] args){ 30 //创建圆形的对象并将半径设置成10 31 Circle circle = new Circle(10); 32 System.out.println("图形的名称是:"+circle.getName()); 33 System.out.println("图形的面积是:"+circle.getArea()); 34 //创建矩形的对象并将长和宽设置成2 35 Rectangle rectangle = new Rectangle(2,2); 36 System.out.println("图形的名称是:"+rectangle.getName()); 37 System.out.println("图形的面积是:"+rectangle.getArea()); 38 } 39 }
运行结果图
5、简单的汽车销售市场
1 abstract class Car{ 2 //用来描述汽车的信息 3 public abstract String getInfo(); 4 } 5 class BMW extends Car{ 6 //用来描述汽车的信息 7 public String getInfo(){ 8 return "BMW"; 9 } 10 } 11 class Benz extends Car{ 12 //用来描述汽车的信息 13 public String getInfo(){ 14 return "Benz"; 15 } 16 } 17 class CarFactory{ 18 public static Car getCar(String name){ 19 //如果需要BMW则创建BMW对象 20 if(name.equalsIgnoreCase("BMW")){ 21 return new BMW(); 22 }else if(name.equalsIgnoreCase("Benz")){ //如果需要Benz则创建Benz对象 23 return new Benz(); 24 }else{ 25 //暂时不支持其他车型 26 return null; 27 } 28 } 29 } 30 public class Customer{ 31 public static void main(String[] args){ 32 System.out.println("顾客要购买BMW"); 33 //顾客要购买BMW 34 Car bmw = CarFactory.getCar("BMW"); 35 //提取BMW 36 System.out.println("提取汽车:"+bmw.getInfo()); 37 System.out.println("顾客要购买benz"); 38 //顾客要购买BMW 39 Car benz = CarFactory.getCar("benz"); 40 //提取BMW 41 System.out.println("提取汽车:"+benz.getInfo()); 42 } 43 }
运行结果图
6、抽象类(抽象方法不能使用private或static关键字进行修饰)
1 abstract class Fruit{ //定义抽象类 2 //定义颜色成员变量 3 public String color; 4 //定义构造方法 5 public Fruit(){ 6 color = "red"; 7 } 8 //定义抽象方法 9 public abstract void harvest(); 10 } 11 class Apple extends Fruit{ 12 public void harvest(){ 13 //输出字符串:"苹果已经收获!" 14 System.out.println("苹果已经收获!"); 15 } 16 } 17 class Orange extends Fruit{ 18 public void harvest(){ 19 //输出字符串:"桔子已经收获!" 20 System.out.println("桔子已经收获"); 21 } 22 } 23 public class Farm{ 24 public static void main(String[] args){ 25 System.out.println("调用Apple类的harvest()方法的结果:"); 26 //声明Apple类的一个对象apple,并为其分配内存 27 Apple apple = new Apple(); 28 apple.harvest(); 29 System.out.println("调用Orange类的harvest()方法的结果:"); 30 //声明Orangle类的一个对象orangle,并为其分配内存 31 Orange orange = new Orange(); 32 orange.harvest(); 33 } 34 }
运行结果图