解决方案 »
- 编程题:一些商品要卖,有A,B,C,D四个用户要买,拍卖原则是:谁出的价格高就给谁。。。
- 一个空指针错误,请大家帮忙看看
- 关于Tomcat
- 怎么可以使用已经定义的类名字的?
- 动态画出图形,图形参数在for循环中不断产生,要能显示出图形的变化过程
- 有关applet的html问题
- 在java中怎么调用C++中的方法??急!!!!!!!!!!
- 请问有谁听说过StreamDecoder类,请讲一下,谢谢
- 下载了jive创建论坛后出现不能正常发表一篇文章字数在100-200之间的帖子????
- 菜菜请教VJ6下的两个初级问题(有关button)。有分哦
- spring+hibernate如何用一条sql语句来删除记录?
- java.util.Map初始化问题
子类可以直接调用父类的static方法。
可以通过类名直接来调用,也可以通过对象来调用。
public class TestFather {
public static String s(String str){
return str;
}
}public class TestSun extends TestFather{ public static void main(String[] args){
System.out.println(TestFather.s("abc"));
System.out.println(new TestFather().s("abc"));
System.out.println(TestSun.s("abc"));
System.out.println(new TestSun().s("abc"));
}}
//第一个类
public class Test
{
public static void main(String args[])
{
System.out.println("a main method is running now");
}
}
//第二个类
public class Test2 extends Test
{
}
/*
编译并运行第二个类,打印出
a main method is running now
由此证明,main方法一样被继承了
没实验的人别乱吹
*/
真是那样的话你运行的也是Test类,和Test2一点儿关系都没有
你这样说不通。
static定义的域或方法是属于类的,不属于对象。所谓的可以通过对象来调用,让人匪夷所思!
至于阻止被继承,应该是 final!
至于构造方法也属于特殊情况。static方法可以被继承吗?在SuperClass中定义一个staticMethod
然后使用SunClass.staticMethod。你试试看不就知道了!呵呵,答案是可以的。
还有static方法是可以被重载的,典型的例子就是你使用的构造方法!试问:构造方法有static的吗?
方法 当然可以继承, 不管是不是静态的!~java的理念: 子承父类, 所有的属性和方法全部继承main()同样也为方法, 为何不能继承这么简单的一个逻辑功能呢?属性和构造方法 不能被重写, 因为它们都是数据结构-- 一个是标志位的 一个是描述位的;
如果构造方法隐式为static,那还真奇怪了,怎么产生不同的对象?
经过试验,你的代码里TestSun.s和new TestSun().s两个方法都不行
不过main()一般都是测试用的~ 继承了也没什么意义额吧..
The Java Programming Language上说过,所有static的方法和属性都是不能覆盖的,只是hidden.
构造方法无法覆盖.
子类只能通过super来直接调用父类的构造方法.
2.所有static的方法和属性都是不能覆盖的//能不能继承?或则说是不是应该叫继承。我觉得还有待商量
但感觉static的东西类似面向过程里的函数,不像对象本质的东西.
继承就是我不定义,就能拿来用。影响继承的只是private,protectd,public等修饰符。
main()是public的 子类就可以继承
你要是能够把父类的一个final方法继承了,我就服你了。
overloading 重载(跟面向对象无关,方法的一种特性,签名不同)
overriding覆盖或者重写(多态的关键,父类和子类的相同签名方法之间的关系)
子类继承了父类的final方法,只是不能overriding罢了
public class SuperClass { public SuperClass() {
} public final void test(){
System.out.println("SuperClass test");
}
}public class SunClass extends SuperClass { public SunClass() { } public void test(){
}
}编译器会提示你错误!
axiuluo 你可以更加还怀疑这样的说法: final表示阻止继承,也就要是说你重写了父类的方法其实就是在重新定义一个新的方法。 因为编译器会提示你错误为你再次提供了怀疑的理由,但这是编译器行为,而不是java语言的本质。
覆盖(overrite, hide): 父类有,子类重新定义,但是参数不同 或者返回值不同
重载(overload):父类有,子类重新定义,方法签名一致---> 多态的基础这种情况应该算是继承,因为子类没有定义main
影响继承的只是private,protectd,public等修饰符。
main()是public的 子类就可以继承
不是自相矛盾?
引用 38 楼 qfs_v 的回复:
final表示阻止继承,也就要是说你重写了父类的方法其实就是在重新定义一个新的方法。
sun问题大了
这就是 矛盾 。就是鸡和蛋的问题,为了解决这样的问题,我们只能站在鸡或蛋的一边来解决。 这里sun选择了鸡。
子类可以直接调用父类的static方法。
可以通过类名直接来调用,也可以通过对象来调用。
由此证明,main方法一样被继承了
没实验的人别乱吹
class A{
public static void main(String[] args){
System.out.println("可以被继承");
}
}
public class B extends A{
public static void main(String[] args){
A.main(new String[]{"fds","fdsfdsa"});
}
}
不能变继承吧,static 方法好像不能被继承,但是可以被调用
不知道final阻止继承的说法从何而来.
它只是阻止子类覆盖整个方法,java编程语言中这样说:Marking a method final means that no extended class can override the method to change its behavior. In other words, this is the final version of that method.
也就相当于说这个方法是最终版.
子类不能重写,但是可以使用.
使用和重写
将共有的部分放在父类中来“使用”,将不同部分放到子类中去“重写”。
对于继承,我们要的不仅仅是使用公共部分,重要的在在于使用重写来达到多态的目的。这也是你所赞同的。“多态就是通过重写(override)实现的.”不知道final阻止继承的说法从何而来. 那你看看下面的类,这就是典型的阻止继承:public final class SuperClass { public SuperClass() {
} public final void test(){
System.out.println("SuperClass test");
}
}
final方法和final类都是一个目的。
重点还是在我上面的话!重要的不是可不可以,而是为什么不可以!
eg. main(String args[])、main(String s)、main(int a); all can excuse in one class.谢谢大家参与,16楼说的比较....以后大家继续研讨。
Java code
//第一个类
public class Test
{
public static void main(String args[])
{
System.out.println("a main method is running now");
}
}
//第二个类
public class Test2 extends Test
{
}
/*
编译并运行第二个类,打印出
a main method is running now
由此证明,main方法一样被继承了
没实验的人别乱吹
*/
汗,我可…
可是我试过了,是可以的。
而且子类是可以使用父类的静态方法的。