① JAVA中为什么要使用接口,继承接口不是还要重写方法吗为什么不直接写那些方法呢
这样跟你说吧,比如一家生产主板的 厂商,它生产主板时,肯定会有显卡、声卡、内存、硬盘等等一大堆接口,如果 全让主板商自己设定方法的话 那不是很麻烦?如果人家显卡的制造商升级显卡了 那主板生产商 就必须得重新制造主板以匹配显卡, 所以说这个是很不方便的。
所以 就只设定一个接口就好了,具体的实现方法,你显卡生产商自己搞定,硬盘生产商就自己搞定硬盘的实现方法,那不是我主板生产商的事,我只给你们提供接口就OK了,
JAVA 接口就是这个作用,如果 你学到后面就感觉到接口是多么重要了
看 完这个例子 我想你应该明白接口了
② java里重写某个方法后为什么在重写的方法里还要调用父类的该方法
因为父类的方法不能完全实现想要的功能,它只能实现部分我们需要的功能,所以重写的方法是扩展了父类方法的功能。
如果父类方法能完全实现我们想用的功能,就不需重写该方法;如果父类方法所实现的功能跟我们所需的功能完全不同,就要全部重写;如果父类方法只是部分实现了我们所需的功能,就要在重写方法时调用父类方法,并在其上扩展功能。
③ java里面的 toString()方法重写是怎么回事啊
string是一个对象,但也可以用基本类型创建的方式来创建,例如:
String s="abababababa";// 基本类型创建的方式
String s= new String("asdsad");//对象
java里,所有的类,不管是java库里面的类,或者是你自己创建的类,全部是从object这个类继承的。object里有一个方法就是toString(),那么其实所有的类创造的时候,都有一个toString的方法。java输出用的函数print();是不接受对象直接输出的,只接受字符串或者数字之类的输出。例如:
class Acccc
{}
Acccc s1 = new Acccc();
System.out.print(s1);
按照print接受的类型来说,s1是不能直接输出的,那么是否代表这个是不能编译运行的呢?当然不是。因为当print检测到输出的是一个对象而不是字符或者数字时,那么它会去调用这个对象类里面的toString 方法。
即使你没有创建,因为是所有的类都是集成object类,所以自然也继承了这个方法。所以默认情况下,你输出一个对象,会调用这个对象继承的toString方法,而object里的这个方法,默认的功能是返回这个对象的名称。
class A
{
String toString()
return “cao”;
}
class B
{
public static void main(String [] args)
{
A x1 = new A();
System.out.println(x1);//输出就是"cao"……
}
}
④ 怎么重写父类中的方法
java中重写父类的方法只需写出与父类一模一样的这个方法即可,包括方法名,参数类型,参数值,返回值。
事例代码如下:
public class Demo extends FDemo{
public static void main(String[] args) {
a();//运行输出b
}
static void a(){
System.out.println("b");
}
}
class FDemo{
static void a(){
System.out.println("a");
}
}
java重写父类方法后,原有的父类里面的实现全部清空,变为重写后的内容。
⑤ java为什么要重写equals !
默认equals在比较两个对象时,是看他们是否指向同一个地址的。
但有时,我们希望两个对象只要是某些属性相同就认为他们的quals为true。比如:
Student s1 = new Student(1,"name1");
Student s2 = new Student(1,"name1");
如果不重写equals的话,他们是不相同的,所以我们要重些equals,判断只要他们的id和名字相同equals就为true,在一些集合里有时也这样用,集合里的contain也是用equals来比较
⑥ JAVA为什么要重写系统已有的方法居然要重写还不如自定义一个方法
我不说什么特别难懂的、举个很简单例子
lz上过QQ吧?
咱们上Q的时候,不是可以发图片、字体、语音、等等?
如果让你写这个功能,lz你会怎么写呢?
写一个发图片的方法、写一个发字体的方法、写一个发语音的方法? 这样?
这样写,最起码我觉得有2个很笨的缺点、、
第一,要写的方法多了很多、、
第二,对象在调用方法的时候,要知道调用的是哪个方法、、 是调用发字体、还是发语音、还是发图片等等?
这样不如弄一个父类,在父类中定义一个show()方法。然后子类继承父类。(子类就是指那些发字体的类、发语音的类、发图片的类)
然后各个子类重写父类的show方法、要发字体的就写发字体,发语音的就发语音。。。。。
然后,你就用一个父类的引用指向子类对象,如 :
Father a = new Son();
然后调用它的show方法
a.show();
假设这个 new Son , new 的是发字体的, 那它调用show方法的时候,自然是调用自己的show方法、、也就是发字体的方法
假设这个 new Son, new 的是发图片的,那它调用的就是发图片的方法、、
如此类推
lz 不觉得这样很方便吗? 只写一个show 方法, 不同的对象去调用有不同的效果。
也解决了我上面说的那2个很笨的缺点。
优点:
1、不用写很多方法,只写一个show方法就可以了、
2、对象调用方法的时候只要调用show方法就可以了,虽然调用的是同一个方法,但是却因为不同的对象调用而产生不同的效果、
其实说那么多,我说的也像二楼说的,说的也是多态性、、
上面只是举个例子,当然我是不知道QQ这个在发字体或者语音是怎么写的、、
⑦ 为什么重写equals方法,一定要重写HashCode方法
重载了equals,比如说是基于对象的内容实现的,而保留hashCode的实现不变,那么很可能某两个对象明明是“相等”,而hashCode却不一样。
这样,当你用其中的一个作为键保存到hashMap、hasoTable或hashSet中,再以“相等的”找另一个作为键值去查找他们的时候,则根本找不到。
使用HashMap,如果key是自定义的类,就必须重写hashcode()和equals()。
而对于每一个对象,通过其hashCode()方法可为其生成一个整形值(散列码),该整型值被处理后,将会作为数组下标,存放该对象所对应的Entry(存放该对象及其对应值)。 equals()方法则是在HashMap中插入值或查询时会使用到。当HashMap中插入值或查询值对应的散列码与数组中的散列码相等时,则会通过equals方法比较key值是否相等,所以想以自建对象作为HashMap的key,必须重写该对象继承object的hashCode和equals方法。 2.本来不就有hashcode()和equals()了么?干嘛要重写,直接用原来的不行么? HashMap中,如果要比较key是否相等,要同时使用这两个函数!因为自定义的类的hashcode()方法继承于Object类,其hashcode码为默认的内存地址,这样即便有相同含义的两个对象,比较也是不相等的,例如,生成了两个“羊”对象,正常理解这两个对象应该是相等的,但如果你不重写 hashcode()方法的话,比较是不相等的!
HashMap中的比较key是这样的,先求出key的hashcode(),比较其值是否相等,若相等再比较equals(),若相等则认为他们是相等的。若equals()不相等则认为他们不相等。如果只重写hashcode()不重写equals()方法,当比较equals()时只是看他们是否为同一对象(即进行内存地址的比较),所以必定要两个方法一起重写。HashMap用来判断key是否相等的方法,其实是调用了HashSet判断加入元素是否相等。
引用别人说的一段话哈~
一般来说,如果你要把一个类的对象放入容器中,那么通常要为其重写equals()方法,让他们比较地址值而不是内容值。特别地,如果要把你的类的对象放入散列中,那么还要重写hashCode()方法;要放到有序容器中,还要重写compareTo()方法。
equals()相等的两个对象,hashcode()一定相等;
equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。换句话说,equals()方法不相等的两个对象,hashcode()有可能相等。(我的理解是由于哈希码在生成的时候产生冲突造成的)。
反过来:hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等
⑧ servlet中为什么要重写doGet或者doPost方法
重写的意义在于自身对访问请求的内容、响应结果等进行自定义的处理,根据form或者url提交过来的访问请求,进行分析和处理,满足自身的业务逻辑。重写的好处就在于只关注要实现的业务逻辑部分,底层通信等机制都不需要使用者关心。
⑨ 重写的作用
呵呵,因为子类有了这个方法后就不用用父类的了。因为他们的具体内容是不一样的
比如。
class Father{
public void run(){
System.out.println("10m/s");
}
}
class Sun extends Father{
public void run(){
System.out.println("20m/s");
}
}
因为father有run这个动作,sun也用这个动作,但是他们的具体内容可能不一样,比如速度。
⑩ java怎么重写一个方法
抽象方法:在类中没有方法体的方法,就是抽象方法。
你类中的抽象方法就没有里面的语句,也就是说你这根本就不符合抽象方法的定义。
如果不是抽象方法super.get()
class A{
void get(){ int i=1;i++;}
}
public class B extends A{
public static void main(String args[]) {
B b = new B();
b.get();
}
void get(){
super.get();
}
}