精华内容
下载资源
问答
  • √ JavaSE - 怎么重写父类的方法

    万次阅读 2021-04-11 09:30:28
    1、父类被重写方法和子类重写方法必须都是非static的。 2、对于访问修饰符,子类方法不能小于父类方法;若父类方法是private的,则子类不能重写方法。 3、对于方法名和形参列表,子类方法必须与父类方法相同。...

    1、父类被重写的方法和子类重写的方法必须都是非static的。
    2、对于访问修饰符,子类方法不能小于父类方法;若父类方法是private的,则子类不能重写该方法。
    3、对于方法名形参列表,子类方法必须与父类方法相同。
    4、对于返回值类型,若父类方法是void或基本数据类型,则子类方法必须与父类方法相同;若父类方法是引用数据类型,则子类方法只能返回与父类方法相同的类型或其子类。
    5、若父类方法抛出异常,则子类方法只能抛出与父类方法相同的异常或其子类。

    public class OverrideMethod {
        public static void main(String[] args) {
            System.out.println("-----父类对象-----");
            Test1 test1 = new Test1();
            test1.print1();
            System.out.println(test1.print2(1));
            System.out.println(test1.print3("Test1.print3"));
            System.out.println("-----子类对象-----");
            Test1 test2 = new Test2();
            test2.print1();
            System.out.println(test2.print2(2));
            System.out.println(test2.print3("Test2.print3"));
        }
    }
    
    class Test1 {
        void print1() {
            System.out.println("Test1.print1");
        }
    
        protected int print2(int value) {
            System.out.println("Test1.print2");
            return value;
        }
    
        public Object print3(String str) throws IndexOutOfBoundsException {
            System.out.println("Test1.print3");
            return str;
        }
    }
    
    class Test2 extends Test1 {
        @Override
        protected void print1() {
            System.out.println("Test2.print1");
        }
    
        @Override
        public int print2(int value) {
            System.out.println("Test2.print2");
            return value;
        }
    
        @Override
        public String print3(String str) throws RuntimeException {
            System.out.println("Test2.print3");
            return str;
        }
    }
    

    在这里插入图片描述

    展开全文
  • 关于equals方法重写 在编写代码的时候 我们总是会需要重写equals代码 因为equals代码没有重写的时候比较的是两个对象的内存地址 而两个代码的内存地址不同 答案肯定返回false 这并不是我们希望看到的 因此要重写...

    关于equals方法的重写

    在编写代码的时候 我们总是会需要重写equals代码
    因为equals代码没有重写的时候比较的是两个对象的内存地址
    而两个代码的内存地址不同 答案肯定返回false 这并不是我们希望看到的 因此要重写equals方法

    public class EqualsZzz {
        public static void main(String[] args) {
    
    
            Name name1=new Name("zhuliang");
    
            Name name2=new Name("zhuliang");
    
            System.out.println(name1.equals(name2));
    
        }
    }
    class Name{
        String name;
    
    
        public Name() {
        }
        
        public Name(String name) {
            this.name = name;
    
        }
    
    }
    

    我们首先写一个代码 我们可以看出 因为是两个不同的对象name1 和name2
    因此两者做比较得到的结果也肯定是false 但是我们是想让他们为true的 所以以下重写equals代码

    //这里是重写的equals方法
    public  boolean equals(Object o){
    		/*第一步判断 从上边的equals传过来的参数name2对应的也就是o是否为空
    	      如果为空 那么没有比较的意义了 返回false
    		 
    		  第二步判断 o是不是一个Object 因为我们要比较的两个肯定是相同类型的 
    		  不是相同类型的 那就不是相同的了 返回false
    		  
    		  以上两步放在一起写了 也就是if((null==o)||!(o instanceof Object))
    		  
    		*/
            if((null==o)||!(o instanceof Object)) return false;
            /*
              第三步判断 他们的内存地址是否相同
    		  this表示当前的调用的 通俗点就是谁调用我谁就是this 由上面我们可以看出来
    		  name1是this  然后o是name2 如果两个住在一个家 那就为一个人了 返回true
    
            */
            if (this==o) return true;
    
    		/*
    		如果o不是null 又是Object 同时 和this(也就是name1)的内存地址不同 没有返回值返回
    		那么判断第四步 :
    			首先由于o是Obejct  因此进行向下类型转换 把它转换为Name
    			然后再由this.name也就是 调用者(name1)的name和强转之后的o(也就是n)的name
    			进行比较 判断两个成员变量的值是否相同 也就是比较名字 名字相同那么这两个值就相同 返回true
    			
    		*/
            Name n=(Name) o;
            return  (this.name==(n.name)) ;
        }
    

    在这里插入图片描述
    在这里插入图片描述
    通过结果我们可以看出 重写之后的equals返回为true 达到了我们的要求
    同时 我们最后一步也可以写成
    在这里插入图片描述
    在这里插入图片描述
    返回的依然为true 值得一提的是 这里调用的equals方法 是系统的equals方法
    在这里插入图片描述

    刚学Java 有错请大佬们指出 会进行更正 这个作为学习笔记 不要下手太重了=_=

    展开全文
  • Android Studio 怎么添加重写方法

    千次阅读 2018-11-16 22:14:04
    在程序中点击右键 --- Generate --- Override Method --选择要加载的函数 选择好以后点击OK。然后就加载进去啦,是不是很简单。

    在程序中点击右键 --- Generate --- Override Method --选择要加载的函数

    选择好以后点击OK。然后就加载进去啦,是不是很简单。

    展开全文
  • 我想重写UITextFiled的方法,在init(frame)上加一个参数,init(frame:CGRECT,uiviewcontroller:UIViewController)请问如何重写
  • 一、为什么要重写equals?默认equals在比较两个对象时,是比较他们是否指向同一个地址的(作用跟 == 相同)。但有时,我们希望两个对象只要是某些属性相同就认为他们的equals返回为true。比如:Student s1 = new ...

    一、为什么要重写equals?

    默认equals在比较两个对象时,是比较他们是否指向同一个地址的(作用跟 == 相同)。

    有时,我们希望两个对象只要是某些属性相同就认为他们的equals返回为true。比如:

    Student  s1 = new Student(1,"name1");

    Student s2 = new Student(1,"name1");
    如果不重写equals的话,他们是不相同的,所以我们要重些equals,判断只要他们的id和名字相同equals就为true,在一些集合(set、map)里有时也这样用,集合里的contain也是用equals来比较。

    二、如何重写equals?

    /** 
     *equlas()方法重写实例 
     */  
    class User {  
     /** 
      *方法描述:设置name值 
      *输入参数:String name 
      *返回类型:void 
      */  
     public void setName(String name) {  
      this.name = name;  
     }  
      
    /** 
      *方法描述:获取name值 
      *输入参数: 
      *返回类型:String 
      */  
     public String getName() {  
       return name;  
     }  
      
    /** 
      *方法描述:重写equals()方法 
      *输入参数:Object obj 
      *返回类型:boolean 
      */  
      
    public boolean equals(Object obj) {  
     if(this == obj) {  
       return true;  
     }  
     if(null == obj) {  
       return false;  
     }  
     if(getClass() != obj.getClass()) {  
       return false;  
     }  
      
     User user = (User) obj;  
     if(!name.equals(user.name)) {  
      return false;  
     }  
      return true;  
    }  
     private String name;  
    }  
      
    public class EqualsDemo {  
     public static void main(String[] args) {  
      User userA = new User();  
      userA.setName("王明");  
        
      User userB = new User();  
      userB.setName("王明");  
      
      User userC = new User();  
      userC.setName("王亮");  
      
      System.out.println("userA equals userB:" + userA.equals(userB));  
      System.out.println("userA equals userC:" + userA.equals(userC));  
     }  
    }  

    三、重写equals时还必须重写hashcode方法

    1.public boolean equals(Object obj),和hashcode()方法是object对象中的方法。
    
    
    2.equals与hashcode间的关系是这样的:

    1、如果两个对象相同(即用equals比较返回true),那么它们的hashCode值一定要相同;

    2、如果两个对象的hashCode相同,它们并不一定相同(即用equals比较返回false)   

    即:
    (1)当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true 
    (2)当obj1.hashCode() == obj2.hashCode()为false时,obj1.equals(obj2)必须为false
    
    
    什么是hashcode?
    hashcode是用于散列数据的快速存取,如利用HashSet/HashMap/Hashtable类来存储数据时,都是根据存储对象的hashcode值来进行判断是否相同的。

    由于为了提高程序的效率才实现了hashcode方法先进行hashcode的比较,如果不同,那没就不必在进行equals的比较了这样就大大减少了equals比较的次数,这对比需要比较的数量很大的效率提高是很明显的,一个很好的例子就是在集合中的使用;我们都知道java中的List集合是有序的,因此是可以重复的,而set集合无序的,因此是不能重复的,那么怎么能保证不能被放入重复的元素呢,但靠equals方法一样比较的话,如果原来集合中以后又10000个元素了,那么放入10001个元素,难道要将前面的所有元素都进行比较,看看是否有重复,这个效率可想而知,因此hashcode就应遇而生了,java就采用了hash表,

    利用哈希算法(也叫散列算法),就是将对象数据根据该对象的特征使用特定的算法将其定义到一个地址上,那么在后面定义进来的数据只要看对应的hashcode地址上是否有值,那么就用equals比较,如果没有则直接插入,只要就大大减少了equals的使用次数,执行效率就大大提高了。继续上面的话题,为什么必须要重写hashcode方法,其实简单的说就是为了保证同一个对象,保证在equals相同的情况下hashcode值必定相同,如果重写了equals而未重写hashcode方法,可能就会出现两个没有关系的对象equals相同的(因为equal都是根据对象的特征进行重写的),但hashcode确实不相同的

    那么如何保证这一点!!

    这样如果我们对一个对象重写了euqals,意思是只要对象的成员变量值都相等那么euqals就等于true,但不重写hashcode,那么我们再new一个新的对象,当原对象.equals(新对象)等于true时,两者的ashcode是不一样,由此将产生了理解的不一致,如在存储散列集合时(如Set类),将会存储了两个值一样的对象,导致混淆,因此,就也需要重写hashcode()







    展开全文
  • 比较同一个类的两个实例的值是否相等,是开发中比较常用的功能,那么重写equals方法,就是我们必须做的,但是为什么重写了equals方法必须重写hashcode方法呢? 1 为什么要重写equals方法? 这个问题很容易理解,...
  • 主要介绍了js怎么覆盖原有方法实现重写,需要的朋友可以参考下
  • ​ -方法重写方法覆盖,override) 1)什么是方法重写 ​ 子类中重新编写父类...3)怎么样使用方法重写 1、在子类中 2、编写一个和父类方法名相同 3、参数列表相同 4、返回值和访问修饰符可以不相同,但返回值...
  • 请教 /** *银行入账日期 */ private String sy101; /** *银行入账时间 */ private String sy102; /** *交易时间 */ ...time的值等于sy101+sy102,time的get,set方法应该怎么
  • 3、重写equals()方法:首先判断两个对象的地址值是否相等,若相等,表示两个对象为同一个对象,则返回true;然后判断两个对象是否为同一类型,若不是,则返回false;最后将比较的对象通过强制类型转换赋给被比较的...
  • 怎么重写equals方法

    2013-11-02 17:04:11
    第一种: 第二种: 个人喜欢第二种,很容易理解,obj.getClass()直接获取运行时的类型 元方:你怎么看?
  • C# - 怎么重写基类

    万次阅读 2021-03-30 09:20:43
    1、可以对父类的属性或方法重写,要求方法签名一致。 2、多态基于重写,利用父类变量引用子类实例时,总会调用与该子类相关的最新重写方法。 using System; namespace Override { class Program { static void...
  • <div><p>侧滑手势返回的时候想做些其他事情</p><p>该提问来源于开源项目:rickytan/RTRootNavigationController</p></div>
  • 子类重写父类方法: 以下的小例子,展示了如何重写 父类: //-定义一个父类–鸟类Birds: public class Birds{ //-定义父类鸟类Birds的fly()方法 public void fly(){ System.out.println(&amp;amp;...
  • 我要实现 点击屏幕记录点击的位置存放到单例数组中; 求解答; 求代码演示;
  • 异常都是从超类的方法继承过来的,怎么加属于自己的异常?
  • C#方法重写

    热门讨论 2020-12-28 15:10:07
    什么是重写? “重写”父类方法就是...怎么重写? 1.重写父类的方法要用到override关键字(具有override关键字修饰的方法是对父类中同名方法的新实现) 2.要重写父类的方法,前提是父类中该要被重写的方法必须...
  •  在Animale类中重写方法如下: public boolean equals(Object obj) {   //如果传入的对象和当前对象一样,直接返回true if(this ==obj) { return true; }  //如果传入的对象可以强转为Animal的...
  • 为什么重写equals方法,还必须要重写hashcode方法

    万次阅读 多人点赞 2019-04-18 16:35:14
    是为了提高效率,采取重写hashcode方法,先进行hashcode比较,如果不同,那么就没必要在进行equals的比较了,这样就大大减少了equals比较的次数,这对比需要比较的数量很大的效率提高是很明显的,一个很好的例子就是...
  • overrider重写的某种过程上并不能完全说是重写基类的方法。 而是重写 子类从基类继承下的这个方法。这是不是也就解释了,父类对象调用方法或者使用多态性——父类对象引用子类对象(子类对象创建父类对象)调用方法...
  • 想在点击item的时候给加监听把点击的item的背景设置一张图片,但是发现好像如果不写在onBindViewHolder方法中滑动recyclerview的时候显示会发生错误,请问在onBindViewHolder中怎么添加item的监听??
  • class A { function __construct() { echo $this->get(); } function get(){ return 'A'; } } class B extends A ...//怎么才能输出A?想达到这样,只能加上final,不让子类重写方法
  • 方法重写原则

    千次阅读 2017-06-21 22:00:40
    1)参数列表必须完全与被重写方法的相同 2)返回类型必须完全与被重写方法的返回类型相同;(备注:这条信息是标准的重写方法的规则,但是在java 1.5 版本之前返回类型必须一样,1.5(包含)j 版本之后ava放宽了限制,...
  • ##IDEA子类继承抽象父类中怎么快速重写父类的构造方法:alt + 回车 其中,注意以下几点: 1、光标必须在父类名称后面,不能有空格。即光标在按快捷键时,必须是在 父类名 { 之间,且紧挨着父类名。 !abstract抽象类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,201
精华内容 880
关键字:

怎么重写方法