ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2022.7.24暑假第五周博客

2022-07-29 12:31:59  阅读:150  来源: 互联网

标签:24 子类 void class 暑假 println 2022.7 父类 public


2022.7.24

上周学习了java中的继承和派生,本周继续学习这一部分,首先是一个例子

public class Employee{

 String name;

public void work()

{

       System.out.println("打工人打工魂");

}

}

class Developer extends Employee {

      public void printName()

{

      System.out.println("name="+name);

}

}

public class E1 {

     public static void main(String[] args) {

 Developer d = new Developer ();//创建一个对象

 d.name="小明";//赋值

 d.printName(); //调用函数进行输出

 d.work();调用函数进行输出

}

}

在这个例子中,通过Developer运用extends关键字继承Employee的方式,对父类的name和work()函数进行了访问。

继承这一方式的好处是提高了代码的复用性,可以提高软件开发效率,同时让类和类之间产生了联系,是多态的前提

以上的内容与C++中的继承是很类似的,但是在java中也有一些其他的注意事项,例如,在java中只支持单继承,即一个类只能有一个父类,但是多个类可以继承一个父类,在java中支持多层继承,举例来说,B继承了A,C继承了B,那C也可以称作A的子类。

2022.7.25

今天继续看继承中父子类中成员变量的特点,举例来说

class Fulei

      int a=5;

}

class Zilei extends Fulei

{

       int b=4;

    public void show()

{

         System.out.println("a="+a);

         System.out.println("b="+b);

}

}

class Demo

{

      public static void main(String[] args)

{

       Zilei z=new Zilei();

       z.show();

}

}

上述例子说明,在java中父类的成员变量是非私有的,子类可以直接访问,若父类的成员变量私有则不能直接访问。

当父子类中出现了同名变量时,若想访问父类中的变量,需要使用关键词super,例子如下

class Fulei

      int a=5;

}

class Zilei extends Fulei

{

       int a=4;

    public void show()

{

         System.out.println("a="+super.a);

         System.out.println("zi a="+this.a);

}

}

class Demo

{

      public static void main(String[] args)

{

       Zilei z=new Zilei();

       z.show();

}

}

2022.7.26

 今天学习在继承中,父子类的成员函数的重写和应用

程序通过对象调用函数时,会先在子类中查找,若存在则执行,若不存在则会执行父类中相应的方法,举例来说

class Fu{
public void show(){
System.out.println("Fu类中的show方法执行");
}
}
class Zi extends Fu{
public void show2(){
System.out.println("Zi类中的show2方法执行");
}
}
public class Test{
public static void main(String[] args) {
Zi z = new Zi();
z.show(); //子类中没有show方法,但是可以找到父类方法去执行
z.show2();
}
}

此外,对于成员函数还有一种特殊情况,即覆盖

当子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为override重写、复写或者覆盖,举例如下

class Fu
{
public void show()
{
System.out.println("Fu show");
}
}
class Zi extends Fu
{
//子类复写了父类的show方法
public void show()
{
System.out.println("Zi show");
}
}

2022.7.27

今天继续学习函数重写(覆盖)的应用

当子类需要父类的功能时,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。
举例来说,比如手机,当描述一个手机时,它具有发短信,打电话,显示来电号码功能,后期由于手机需要在来电显示功能中增加显示姓名和头像,这时可以重新定义一个类描述智能手机,并继承原有描述手机的类。并在新定义的类中覆盖来电显示功能,在其中增加显示姓名和头像功能。
在子类中,访问父类中的成员方法格式为 super.父类成员函数(); 举例如下

//手机类
class Phone{
public void sendMessage(){
System.out.println("发短信");
}
public void call(){
System.out.println("打电话");
}
public void showNum(){
System.out.println("来电显示号码");
}
}

//智能手机类
class NewPhone extends Phone{

//覆盖父类的来电显示号码功能,并增加自己的显示姓名和图片功能
public void showNum(){
//调用父类已经存在的功能使用super
super.showNum();
//增加自己特有显示姓名和图片功能
System.out.println("显示来电姓名");
System.out.println("显示头像");
}
}

2022.7.28

重载与重写的区别

先说重载,修饰符用的是 public/private/默认:无关

重载时两个函数的函数名必须相同

形参类型的顺序、个数或者类型不同,三者至少满足一个,重载类型与返回值类型无关

重写的修饰符同样是public/private/默认:无关,子类函数的权限>=父类函数的权限

函数名:子类函数与父类函数的函数名必须相同

形参列表:子类函数和父类函数的形参列表必须相同,返回值类型和基本数据类型也必须相同,子类函数的返回值类型和父类函数的返回值类型相同,或者子类函数的返回值类型是父类函数返回值类型的子类

抽象类的学习如下

与C++中的抽象类似,是发现了事物共性的内容,向上抽取的来的产物,在java中的关键字是abstract(抽象),被它修饰的类是抽象类

定义如下:

public abstract 返回值类型 函数名 (参数);

        abstract class 类名{}

例如

abstract class Developer {

  public abstract void work();

}

class JavaEE extends Developer {

  public void work(){

  System.out.println("正在努力学习“);

}

}

class Android extends Developer {

    public void work(){

           System.out.println("也在努力学习”);

}

}

2022.7.29

今天继续学习抽象类的特点

1、首先来说,抽象类和抽象函数都被关键子abstract修饰,抽象函数一定要定义在抽象类中

2、与C++一致地,抽象类不可以直接创建对象,是因为调用抽象函数没有意义

3、只有覆盖了抽象类中的所有的抽象函数后,这个子类才可以创建对象,否则该子类还是一个抽象类 

抽象类的细节问题:
1、抽象类一定是个父类? 是的,因为不断抽取而来的。
2、抽象类中是否可以不定义抽象方法。是可以的,那这个抽象类的存在到底有什么意义呢?不让该类创建对象,方法可以直接让子类去使用
3、抽象关键字abstract不可以和哪些关键字共存?

private:私有的方法子类是无法继承到的,也不存在覆盖,而abstract和private一起使用修饰方法,abstract既要子类去实现这个方法,而private修饰子类根本无法得到父类这个方法。互相矛盾。

2022.7.30

今天看一道整体的从网上查来的例题,关于java中的员工类的系列定义

题目如下:

某IT公司有多名员工,按照员工负责的工作不同,进行了部门的划分(研发部员工、维护部员工)。研发部根据所需研发的内容不同,又分为JavaEE工程师、Android工程师;维护部根据所需维护的内容不同,又分为网络维护工程师、硬件维护工程师。
公司的每名员工都有他们自己的员工编号、姓名,并要做它们所负责的工作。

工作内容

JavaEE工程师:员工号为xxx的 xxx员工,正在研发淘宝网站
Android工程师:员工号为xxx的 xxx员工,正在研发淘宝手机客户端软件
网络维护工程师:员工号为xxx的 xxx员工,正在检查网络是否畅通
硬件维护工程师:员工号为xxx的 xxx员工,正在修复打印机
请根据描述,完成员工体系中所有类的定义,并指定类之间的继承关系。进行XX工程师类的对象创建,完成工作方法的调用。

代码如下:

public abstract class Employee{

    private: String id;

    private String name;

    public String getId()

{

      return id;

}

     public void setId(String id){

   this.id=id;

}

public String getName(){

return name;

}

public void setName(String name){

   this.name=name;

}

 public abstract void work();

}

public abstract class Developer extends Employee{

}

public abstract class Maintainer extends Employee
{}

public class JavaEE extends Developer {
@Override
public void work() {
System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在研发淘宝网站");
}
}

public class Android extends Developer {
@Override
public void work() {
System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在研发淘宝手机客户端软件");
}
}

public class Network extends Maintainer {
@Override
public void work() {
System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在检查网络是否畅通");
}
}

public class Hardware extends Maintainer {
@Override
public void work() {
System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在修复打印机");
}
}

public class Test {
public static void main(String[] args) {
//创建JavaEE工程师员工对象
JavaEE ee = new JavaEE();
//设置该员工的编号
ee.setId("000015");
//设置该员工的姓名
ee.setName("小明");
//调用该员工的工作方法
ee.work();
}
}

 

标签:24,子类,void,class,暑假,println,2022.7,父类,public
来源: https://www.cnblogs.com/Arkiya/p/16527715.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有