Java-OO之继承与static静态关键字

简介: Java-OO之继承与static静态关键字

运行结果

name=Carl Cracker,salary=78750.0,hireDay=Tue Dec 15 00:00:00 CST 1987
name=Harry Hacker,salary=52500.0,hireDay=Sun Oct 01 00:00:00 CST 1989
name=Tony Tester,salary=42000.0,hireDay=Thu Mar 15 00:00:00 CST 1990

1. raiseSalary方法有什么用?


答:求出工资的涨幅,计算出5%涨的薪水的金额


2.1 代码中3个Employee对象调用raiseSalary方法所执行的代码一样吗?

答:执行的代码一样


2.2返回结果一样吗?为什么?


答:返回的结果不一样,因为根据

double raise = salary * byPercent / 100;

每一个Employee的初始salary是不一样的,因此得到的涨薪的金额是不同的。


3.1 能不能将raiseSalary定义为static?


不能。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。显然,要调用raiseSalary方法,必须需要先创建对象,才可以调用raiseSalary方法,使得方法是有意义的。


3.2 结合该例子,你觉得一般来说什么样的方法应该声明为static?


直接通过类名调用,该方法通常声明为static。至于变量,如果声明为static,通常表示需要常驻内存的。定义类本身的变量,或者类方法,而不是实例变量或者实例方法的时候用static,例如调用Math类中的PI,其申明就为static。

public static final double PI = 3.14159265358979323846;


4. 进阶要求:使用Java8中的日期类,替换掉Employee类中的hireDay。


运行结果

name=Carl Cracker,salary=78750.0,hireDay=Tue Dec 15 00:00:00 CST 1987
name=Harry Hacker,salary=52500.0,hireDay=Sun Oct 01 00:00:00 CST 1989
name=Tony Tester,salary=42000.0,hireDay=Thu Mar 15 00:00:00 CST 1990

修改后的代码入下:

import java.util.*;
import java.time.DayOfWeek;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class EmployeeTest
{
   public static void main(String[] args)
   {
      Employee[] staff = new Employee[3];
      staff[0] = new Employee("Carl Cracker", 75000, 1987, 12, 15);
      staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
      staff[2] = new Employee("Tony Tester", 40000, 1990, 3, 15);
      for (Employee e : staff)
         e.raiseSalary(5);
      for (Employee e : staff)
         System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay="
               + e.getHireDay());
   }
}
class Employee
{
   public Employee(String n, double s, int year, int month, int day)
   {
      name = n;
      salary = s;
      LocalDate date = LocalDate.of(year, month, day);// GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
      hireDay = date;// hireDay = calendar.getTime();
   }
   public String getName()
   {
      return name;
   }
   public double getSalary()
   {
      return salary;
   }
   public LocalDate getHireDay()  // public Date getHireDay()
   {                              //{
      return hireDay;            //return hireDay;
   }                             //}
   public void raiseSalary(double byPercent)
   {
      double raise = salary * byPercent / 100;
      salary += raise;
   }
   private String name;
   private double salary;
   private LocalDate hireDay;//private Date hireDay;
}


相关文章
|
19天前
|
存储 Java
Java 中的静态(static)
【10月更文挑战第15天】静态是 Java 语言中一个非常重要的特性,它为我们提供了一种方便、高效的方式来管理和共享资源。然而,在使用过程中,我们需要谨慎考虑其优缺点,以确保代码的质量和可维护性。
|
23天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
17 3
|
23天前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
30 2
|
23天前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
28 2
|
23天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
28 1
|
1月前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
28 3
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
1月前
|
Java 测试技术 编译器
Java零基础-继承详解!
【10月更文挑战第4天】Java零基础教学篇,手把手实践教学!
34 2
|
1月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
21 5
|
1月前
|
Java
java继承和多态详解
java继承和多态详解
42 5