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;
}


相关文章
|
1月前
|
JavaScript 前端开发 Java
java中的this关键字
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。自学前端2年半,正向全栈进发。若我的文章对你有帮助,欢迎关注,持续更新中!🎉🎉🎉
51 9
|
1月前
|
设计模式 JavaScript 前端开发
java中的static关键字
欢迎来到瑞雨溪的博客,博主是一名热爱JavaScript和Vue的大一学生,致力于全栈开发。如果你从我的文章中受益,欢迎关注我,将持续分享更多优质内容。你的支持是我前进的动力!🎉🎉🎉
51 8
|
29天前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
81 1
|
1月前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
47 4
|
1月前
|
存储 Java
Java 中的静态(static)
【10月更文挑战第15天】静态是 Java 语言中一个非常重要的特性,它为我们提供了一种方便、高效的方式来管理和共享资源。然而,在使用过程中,我们需要谨慎考虑其优缺点,以确保代码的质量和可维护性。
|
2月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
27 3
|
2月前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
51 2
|
2月前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
38 2
|
2月前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
45 1
|
2月前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
在Java并发编程中,`final`关键字不仅用于修饰变量、方法和类,还在多线程环境中确保对象状态的可见性和不变性。本文深入探讨了`final`关键字的作用,特别是其在final域重排序规则中的应用,以及如何防止对象的“部分创建”问题,确保线程安全。通过具体示例,文章详细解析了final域的写入和读取操作的重排序规则,以及这些规则在不同处理器上的实现差异。
了解final关键字在Java并发编程领域的作用吗?