ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java第七课

2021-02-25 15:04:30  阅读:144  来源: 互联网

标签:Java 第七课 子类 void class int 静态 public


Java第七课

一、课后作业讲解

public class Shape {
   /**
    * 计算长方形的周长
    * @param rectangle
    * @return
    */
   public int perimeter(Rectangle rectangle) {
       return (rectangle.getLength()+rectangle.getWidth())*2;
  }
   /**
    * 计算正方形的周长
    * @param square
    * @return
    */
   public int perimeter(Square square) {
       return square.getWidth()*4;
  }
}
public class Square {
   /**
    * 边长
    */
   private int width;

   public Square(int width) {
       this.width = width;
  }

   public int getWidth() {
       return width;
  }
}
public class Rectangle {
   /**
    * 长
    */
   private int length;
   /**
    * 宽
    */
   private int width;

   public Rectangle(int length, int width) {
       this.length = length;
       this.width = width;
  }

   public int getLength() {
       return length;
  }

   public int getWidth() {
       return width;
  }
}

二、属性的继承

当父类中的属性不是私有的可以继承到子类中,当子类中有同名的属性时,会覆盖父类的属性,有点像方法的重写

重点:父类的属性可以被继承,但无法覆盖,这个和方法不一样

三、多态

多态是用父类声明的变量指向子类的实现,该变量随着实现的子类不同,对于相同的行为(方法)表现出不同的现象,就是多态

Father有三个子类Son1,Son2,Son3

Father类中的say行为(方法)在三个子类中都被重写,表现不同

Father person = new Son1(); person.say()表现出大声说话

Father person = new Son2(); person.say()表现出小生哼哼

Father person = new Son3(); person.say()表现出抑扬顿挫

多态时,用父类声明的变量只能在父类中获取自身的属性,无法获取子类的属性

虽然person实际上是指向了内存中Son1的对象,但是只能获取父类的属性。

如果父类中的方法在子类中有重写,则用person调用该方法时,实际调用的是子类的方法。

  • 当多态时,子类中的方法可以重写父类中的方法,子类中的属性无法覆盖父类中的属性。当通过父类声明的变量调用属性时,永远获取的时父类中的属性,调用方法时,永远调用的是子类的方法。

  • 多态的优点

    1. 增加了程序的灵活性

    2. 增加了程序的扩展性

public class Party {
   public static void main(String[] args) {
       Party party = new Party();
       party.act(new Yueyunpeng());
       party.act(new Songxiaofeng());
  }

   public void act(Actor actor) {
       actor.say();
  }
}
class Actor{
   protected void say() {
       System.out.println("Actor say");
  }
}
class Yueyunpeng extends Actor{
   @Override
   protected void say() {
       System.out.println("我的天哪");
  }
}
class Dacui extends Actor{
   @Override
   protected void say() {
       System.out.println("好尴尬啊");
  }
}
class Songxiaofeng extends Actor{
   @Override
   protected void say() {
       System.out.println("此时此景我想吟诗一首");
  }
}

四、静态

  • static

  • public static void main(String[] args)

  • 当一个类中有静态的成员时,这个类被加载到JVM中时,会首先初始化静态的成员

public class Student {
   /**
    * 静态的成员
    */
   protected static int num;

   /**
    * 增加学生
    * @param student
    */
   protected static void add(Student student) {
       
  }
}

当Student.class文件加载到JVM中时,JVM会创建一个Class对象(类模板对象),在这个对象中存储了num和add对象(num是一个成员对象,add是一个方法对象)

Student student;当这行代码执行时,JVM就会加载class文件,换句话说,当代码中一旦出现了Student字样,JVM就会加载Student.class文件。

Class在Java中是一个特殊的类,是模板类,它会根据类的实际信息构建出该类的一个模板对象,模板对象中存储着类的成员对象

它会在模板对象中存储静态的成员信息num和add,num = 0;模板对象中分两块区域,一块是静态区域,一块非静态的

当Student类加载到JVM时,此时并没有Student的实例,所以静态是脱离实例存在的,它不属于某个实例,而是属于该类的信息。调用静态成员时,只需要通过类名.调用,不需要实例来调用。

在静态方法中,是无法使用实例信息的,因为在静态方法中,实例还没有创建,先有静态,后有实例。

静态和类的关系,静态属于类的,不属于实例的,静态可以被继承,但无法覆盖。

  1. 静态成员属于类,不属于对象

  2. 静态方法无法访问实例

  3. 静态可以被继承,但无法覆盖

静态的优点: 1.通过类名方便调用,多用于工具类的方法

2.公共资源,不随实例的变化而变化

静态的缺点:1.因为是公共的,从JVM加载到JVM卸载始终占用资源,不会被回收

public class Ticket {
   /**
    * 共有20张票
    */
   private static int num = 20;

   public  void sale() {
       if (num <= 0) {
           System.out.println("票已售罄");
      } else {
           System.out.println("剩余" + --num+"张票");
      }
  }

   public static void main(String[] args) {
       Ticket ticket = new Ticket();
       for (int i=0;i<21;i++) {
           ticket.sale();
      }
  }
}

五、抽象

  • abstract

  • 没有方法体的方法是抽象方法,有抽象方法的类必须是抽象类

  • 抽象类可以没有抽象方法

  • 抽象类无法创建实例,不能new

  • abstract class A{

    abstract void work();

    }

    work是一个抽象方法,这个方法什么都没有做。假设让 A a = new A();

    a.work();为了避免什么都不能做的情况,就不能让抽象类初始化,创建对象。

    抽象类存在的意义是被继承。



标签:Java,第七课,子类,void,class,int,静态,public
来源: https://www.cnblogs.com/ty0910/p/14446976.html

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

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

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

ICode9版权所有