QQ登录

只需一步,快速开始

搜索
【活动】边做笔记边学习,还能赢取奖学金!
查看: 61|回复: 1

[学习笔记] Java暑期学习Day11

[复制链接]
累计签到:9 天
连续签到:2 天
最佳答案
2 
发表于 7 天前 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 马太效应 于 2017-7-15 23:55 编辑

今天是第11天,希望能坚持下去
ps下一次要早一点写笔记


构造函数
  A.默认构造器(重申)
  作用:
1.创建对象,必须和new在一起使用
  2.完成对象的初始化操作
  特点:
  1.构造器的名称和当前所在类的名称相同
  2.禁止定义任何返回类型
  3.构造器中,不需要使用return语句


  1. class Student {

  2.         String name;
  3.         boolean isFee = false;// 是否已交学费

  4.         // 默认构造器
  5.         Student() {
  6.                 System.out.println(" what a ghost");
  7.         }

  8.         void fees() {

  9.                 isFee = true;// 修改是否交学费的状态

  10.         }

  11. }

  12. public class studentDemo {

  13.         public static void main(String[] args) {

  14.                 // 创建五个学生对象
  15.                 Student s1 = new Student();
  16.                 s1.name = "赵";

  17.                 Student s2 = new Student();
  18.                 s2.name = "钱";
  19.                 s2.isFee = true;

  20.                 Student s3 = new Student();
  21.                 s3.name = "孙";
  22.                 s3.isFee = false;

  23.                 Student s4 = new Student();
  24.                 s4.name = "李";

  25.                 Student s5 = new Student();
  26.                 s5.name = "周";
  27.                 System.out.println(s5.isFee);
  28.                 // 创建数组
  29.                 Student[] students = new Student[] { s1, s2, s3, s4, s5 };

  30.                 for (Student s : students) {
  31.                         System.out.println(s.name + "," + s.isFee);
  32.                         // 判断学生是否已经缴费
  33.                         // 如果没有,则调用其缴费方法
  34.                         if (!s.isFee) {
  35.                                 s.fees();
  36.         }

  37.                 }
  38.                 System.out.println(s3.isFee);//true

  39.                 // 集合,数组中存储的元素,都是该对象的引用地址

  40.                 System.out.println(students[4] == s5);// true

  41.         }

  42. }
复制代码
定义多个构造函数,只要参数类型或个数不同,这称为重载构造函数。


重载(Overload)
A. 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
    每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表
    最常用的地方就是构造器的重载。
B.  重载规则

  1.被重载的方法
必须改变参数列表(参数个数或类型或顺序不一样);

  2.被重载的方法可以改变返回类型;

(!!!重写方法不行
  3.被重载的方法可以改变访问修饰符

(!!!重写方法不能做更严格的限制(可以降低限制)
  4.被重载的方法可以声明新的或更广的检查异常
(!!!重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以

  5.方法能够在同一个类中或者在一个子类中被重载。


  6.无法以返回值类型作为重载函数的区分标准。



7.对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

C.定义方法时,也可以进行重载,可为类似功能的方法提供统一名称,但根据参数类型或个数的不同调用相应的方法。

D.编译程序在处理重载方法时,会依照以下顺序来处理:
(1)还没有装箱动作前可符合自变量个数与类型的方法。
(2)装箱动作后可符合自变量个数与类型的方法。
(3)尝试有不定长度自变量并可符合自变量类型的方法。
(4)找不到合适的方法,编译错误。


重写(Override/覆盖)
<子类拓展父类的时候,某个方法不适合子类特征>
A.
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变
  重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
  重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。



在面向对象原则里,重写意味着可以重写任何现有方法。


B.方法的重写(Override)规则
1.参数列表必须完全与被重写方法的相同;(一同)

2.返回类型必须完全与被重写方法的返回类型相同


3.访问权限不能比父类中被重写的方法的访问权限更低

<被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。>


4.父类的成员方法只能被它的子类重写。

5.声明为final的方法不能被重写。
6.声明为static的方法不能被重写,但是能够被再次声明。

7.子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。

8.子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。


9.重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。
但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以

<子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常>
10.构造方法不能被重写。

11.如果不能继承一个方法,则不能重写这个方法。


  1. class Bird {
  2.         protected void Fly() {
  3.                 System.out.println("我要飞得更高");
  4.         }

  5. }

  6. class Penguin extends Bird {


  7.         public void swimming() {
  8.                 super.Fly();
  9.                 this.Fly();
  10.                 System.out.println("游泳,很凉快~");
  11.         }

  12. }

  13. // 方法覆盖

  14. public class OverrideDemo {
  15.         public static void main(String[] args) {

  16.                 Penguin p = new Penguin();
  17.                 p.Fly();// 先从本类中找fly方法
  18.                 p.swimming();
  19. }

  20. }
复制代码
注意:方法的覆盖,重写    只能对方法有效
       类,字段,构造器没有覆盖的概念




本帖被以下淘专辑推荐:

1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
累计签到:9 天
连续签到:2 天
最佳答案
2 
 楼主| 发表于 6 天前 | 显示全部楼层
<puls>
A.重载Overload


  1. public class OverloadDemo {

  2.         // 重载的方法名字相同,参数个数或类型不同
  3.         public void someMethod() {

  4.         }

  5.         /*
  6.          * public void someMethod(){ } Duplicate method someMethod() in type
  7.          * OverloadDemo Duplicate v.重复; 复制; 复印; adj.复制的; 副本的; 完全一样的; n.副本; 完全一样的东西;
  8.          * 复制品;
  9.          */
  10.         public void someMethod(int i) {

  11.         }

  12.         public void someMethod(int i, float y) {

  13.         }

  14.         // 被重载的方法可以改变返回类型
  15.         public int someMethod(double a) {
  16.                 return 3;
  17.         }

  18.         public String someMethod(float a) {
  19.                 return "今天是个好日子";
  20.         }

  21.         // 被重载的方法可以改变访问修饰符

  22.         protected int someMethod(boolean a) {
  23.                 return 3;
  24.         }

  25. }
复制代码


B.重写(Override)时子类方法的修饰符:必须大于父类方法的修饰符
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋手机版Archiver( 粤公网安备 44051102000370号 | 粤ICP备11014136号

© 2010-2017 FishC.com GMT+8, 2017-7-22 10:44 Powered by Discuz! X2.5 Theme by dreambred

快速回复 返回顶部 返回列表