Java中调用另一个类的java调用父类构造方法法有什么用呢?

java中怎样调用另一个类的main方法
java中怎样调用另一个类的main方法
09-04-20 &匿名提问
如果下一个程序跟Man类在同一个包内,就不需要import。如果在另一个包内,比如在包A内,就是import A.M如果在包A的里面一个包B里,就import A.B.M
请登录后再发表评论!
如果下一个程序跟Man类在同一个包内,就不需要import。如果在另一个包内,比如在包A内,就是import A.M如果在包A的里面一个包B里,就import A.B.M
请登录后再发表评论!
下一个程序跟Man类在同一个包内,就不需要import。如果在另一个包内,比如在包A内,就是import A.M
请登录后再发表评论!
父类的构造方法不能被子类继承。以下语句中MyException类继承了java.lang.Exception类。public class MyException extends Exception{} // MyException类只有一个隐含的默认构造方法尽管在Exception类中定义了如下形式的构造方法:public Exception(String msg)但MyException类不会继承以上Exception类的构造方法,因此以下代码是不合法的。//编译出错,MyException类不存在这样的构造方法Exception e=new MyException(&Something is error&); 在子类的构造方法中,可以通过super语句调用父类的构造方法。例如:public class MyException extends Exception{public MyException(){//调用Exception父类的Exception(String msg)构造方法super(&Something is error&);}public MyException(String msg){//调用Exception父类的Exception(String msg)构造方法super(msg);} }用super语句来调用父类的构造方法时,必须遵守以下语法规则。l 在子类的构造方法中,不能直接通过父类方法名调用父类的构造方法,而是要使用super语句,以下代码是非法的:public MyException(String msg){Exception(msg); //编译错误}l 假如在子类的构造方法中有super语句,它必须作为构造方法的第一条语句,以下代码是非法的:public MyException(){String msg= &Something wrong&;super(msg); //编译错误,super语句必须作为构造方法的第一条语句}在创建子类的对象时,Java虚拟机首先执行父类的构造方法,然后再执行子类的构造方法。在多级继承的情况下,将从继承树的最上层的父类开始,依次执行各个类的构造方法,这可以保证子类对象从所有直接或间接父类中继承的实例变量都被正确地初始化。例如以下父类Base和子类Sub分别有一个实例变量a和b,当构造Sub实例时,这两个实例变量都会被初始化。public class Base{public Base(int a){ this.a=a;}public int getA(){}}public class Sub extends Base{public Base(int a,int b){super(a); this.b=b;}public int getB(){}public static void main(String args[]){Sub sub=new Sub(1,2);System.out.println(&a=&+sub.getA()+& b=&+sub.getB()); //打印a=1 b=2}}在例程11-3(Son.java)中,Son类继承Father类,Father类继承Grandpa类。这3个类都显式定义了默认的构造方法,此外还定义了一个带参数的构造方法。例程11-3 Son.javaclass Grandpa{protected Grandpa(){System.out.println(&default Grandpa&);}public Grandpa(String name){System.out.println(name);}}class Father extends Grandpa{protected Father(){System.out.println(&default Father&);}public Father(String grandpaName,String fatherName){super(grandpaName);System.out.println(fatherName);}}public class Son extends Father{public Son(){System.out.println(&default Son&);}public Son(String grandpaName,String fatherName,String sonName){super(grandpaName,fatherName);System.out.println(sonName);}public static void main(String args[]){Son s1= new Son(&My Grandpa&, &My Father&, &My Son&); //①Son s2=new Son(); //②}}执行以上main()方法的第①条语句,打印结果如下:My GrandpaMy FatherMy Son此时构造方法的执行顺序如图11-1所示。如果子类的构造方法没有用super语句显式调用父类的构造方法,那么通过这个构造方法创建子类对象时,Java虚拟机会自动先调用父类的默认构造方法。执行以上Son类的main()方法的第②条语句,打印结果如下:default Grandpadefault Fatherdefault Son此时构造方法的执行顺序如图11-2所示。图11-1 调用Son类的带参数的构造方法时 图11-2 调用Son类的默认构造方法时所有构造方法的执行顺序 所有构造方法的执行顺序当子类的构造方法没有用super语句显式调用父类的构造方法,而父类又没有提供默认构造方法时,将会出现编译错误。例如把例程11-3做适当修改,删除Grandpa类中显式定义的默认构造方法。// protected Grandpa(){// System.out.println(&default GrandPa&);// }这样,Grandpa类就失去了默认构造方法,此时编译Father类的默认构造方法,因为找不到Grandpa类的默认构造方法而编译出错。如果把Grandpa类的默认构造方法的protected访问级别改为private访问级别,也会导致编译错误,因为Father类的默认构造方法无法访问Grandpa类的私有默认构造方法。在以下例子中,子类Sub的默认构造方法没有通过super语句调用父类的构造方法,而是通过this语句调用了自身的另一个构造方法Sub(int i),在Sub(int i)中通过super语句调用了父类Base的Base(int i)构造方法。这样,无论通过Sub类的哪个构造方法来创建Sub实例,都会先调用父类Base的Base(int i)构造方法。class Base{Base(int i){System.out.println(&call Base(int i)&);}}public class Sub extends Base{Sub(){this(0); System.out.println(&call Sub()&);}Sub(int i){super(i); System.out.println(&call Sub(int i)&);}public static void main(String args[]){Sub sub=new Sub();}}执行以上Sub类的main()方法的new Sub()语句,打印结果如下:call Base(int i)call Sub(int i)call Sub()图11-3 调用Sub类的默认构造方法时所有构造方法的执行顺序此时构造方法的执行顺序如图11-3所示。在下面的例子中,Base类中没有定义任何构造方法,它实际上有一个隐含的默认构造方法:Base(){}Sub类的Sub(int i)构造方法没有用super语句显式调用父类的构造方法,因此当创建Sub实例时,会先调用Base父类的隐含默认构造方法。class Base{} //具有隐含默认构造方法public class Sub extends Base{Sub(int i){System.out.println(i);}public static void main(String args[]){System.out.println(new Sub(1)); //打印1}}构造方法只能通过以下方式被调用:当前类的其他构造方法通过this语句调用它。 当前类的子类的构造方法通过super语句调用它。 在程序中通过new语句调用它。对于例程11-4(Sub.java)的代码,请读者自己分析某些语句编译出错的原因。例程11-4 Sub.javaclass Base{public Base(int i,int j){}public Base(int i){this(i,0); //合法Base(i,0); //编译出错}}class Sub extends Base{public Sub(int i,int j){super(i,0); //合法}void method1(int i,int j){this(i,j); //编译出错Sub(i,j); //编译出错}void method2(int i,int j){super(i,j); //编译出错}void method3(int i,int j){Base s=new Base(0,0); //合法s.Base(0,0); //编译出错}}11.2.5 构造方法的访问级别构造方法可以处于public、protected、private和默认这4种访问级别之一。本节着重介绍构造方法处于private级别的意义。当构造方法为private级别时,意味着只能在当前类中访问它:在当前类的其他构造方法中可以通过this语句调用它,此外还可以在当前类的成员方法中通过new语句调用它。在以下场合之一,可以把类的所有构造方法都声明为private类型。(1)在这个类中仅仅包含了一些供其他程序调用的静态方法,没有任何实例方法。其他程序无须创建该类的实例,就能访问类的静态方法。例如java.lang.Math类就符合这种情况,在Math类中提供了一系列用于数学运算的公共静态方法,为了禁止外部程序创建Math类的实例,Math类的惟一的构造方法是private类型的。private Math(){}在第7章的7.2节(abstract修饰符)提到过,abstract类型的类也不允许实例化。也许你会问,把Math类定义为如下abstract类型,不是也能禁止Math类被实例化吗?public abstract class Math{…}如果一个类是抽象类,意味着它是专门用于被继承的类,可以拥有子类,而且可以创建具体子类的实例。而JDK并不希望用户创建Math类的子类,在这种情况下,把类的构造方法定义为private类型更合适。(2)禁止这个类被继承。当一个类的所有构造方法都是private类型的时,假如定义了它的子类,那么子类的构造方法无法调用父类的任何构造方法,因此会导致编译错误。在第7章的7.3.1节(final类)中提到过,把一个类声明为final类型,也能禁止这个类被继承。这两者的区别是: 如果一个类允许其他程序用new语句构造它的实例,但不允许拥有子类,那么就把类声明为final类型。 如果一个类既不允许其他程序用new语句构造它的实例,又不允许拥有子类,那么就把类的所有构造方法声明为private类型。由于大多数类都允许其他程序用new语句构造它的实例,因此用final修饰符来禁止类被继承的做法更常见。(3)这个类需要把构造自身实例的细节封装起来,不允许其他程序通过new语句创建这个类的实例。这个类向其他程序提供了获得自身实例的静态方法,这种方法称为静态工厂方法,本章第11.3节(静态工厂方法)对此做了进一步的介绍。
请登录后再发表评论!在java中如何在一个类中使用另一个类中的paint()方法?
站内搜索: 请输入搜索关键词
→ 在java中如何在一个类中使用另一个类中的paint()方法?
在java中如何在一个类中使用另一个类中的paint()方法?
摘要: 在java中如何在一个类中使用另一个类中的paint()方法?
我在class drawarrow中已写有一个paint()方法,通过该方法做了2个弧.现在我想在另一个class中通过构造方法,startAngle和arcAngle作为构造器的参数,调用class drawarrow中的paint()方法来画弧,请问我应该这么写另一个类.class drawarrow的代码如下import java.awt.Cimport java.awt.Fimport java.awt.Gpublic class drawarrow extends Frame{public drawarrow(String title){
super(title);
setSize();
setVisible(true);
}public void paint(Graphics g){ int x=512,y=384;//屏幕中心X,Y坐标
int width1=175,width2=width1+20;//小圆和大圆的半径
int startAngle=-85;//起始角度,0表示在3点钟的位置,
int arcAngle=60;//从startAngle开始逆时针转的角度
int x1=x-width1,y1=y-width1;//小圆确定点
int x2=x-width2,y2=y-width2;//大圆确定点
g.setColor(Color.BLUE);
g.fillArc(x2, y2, 2*width2, 2*width2, startAngle, arcAngle);
g.fillArc(x1, y1, 2*width1, 2*width1, startAngle, arcAngle);}public static void main(String[] args) {new drawarrow("Hello3");}}public class Test2 extends Frame{
private drawarrow
public Test2(){draw=new drawarrow("Default"); }
public void paint(){
// draw.paint();
}}没看懂你的要求,不知道你是不是要大概类似这个?这个实现不难.要想在一个类中调用另一个类的方法.比如这个paint()方法.就把这个方法定义成public就可以了.在要调用类中用 drawarrow.paint()就实现调用了.public OtherClass extends JFrame {private drawarrow draw = new
drawarrow("Hello");public void paint(Graphics g) {draw.paint(g);}}这种用法,不值得推荐,楼主应该改正一下你的设计了还有,类名不要用动词命名,首字母大写。不懂得遵守基本的编程规则的人,只能算到菜鸟的行列。。。是我没把问题说清楚,我的意思是在class drawarrow中加入构造方法drawarrow(int startAngle,int arcAngle){},然后在另一个类中new drawarrow(0,90);,new drawarrow(-30,120);等,这样就能利用已有的方法写画出N个弧,另一个类应该怎么写哪,还有在class drawarrow的构造方法应该怎么写?另一个类可以继承drawarrow,能直接使用,也可以在另一个类的方法中用drawarrow的对象来调用paint方法。同一个包里的一个类调用另一个类里的构造函数,为啥会出错,求解【java吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:652,487贴子:
同一个包里的一个类调用另一个类里的构造函数,为啥会出错,求解收藏
import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.net.*;public class H1 extends JFrame implements ActionListener{Panel panel=JButton button=JTextField text_field=JTextArea text_area=JLabel label=JScrollPane scorll_ReadURLif r=new ReadURLif();public static void main(String[] args){H1 h=new H1();}public H1(){panel=new Panel();label=new JLabel(&URL:&);button=new JButton(&搜索&);text_field=new JTextField(15);text_field.addActionListener(this);text_field.setActionCommand(&search&);text_area=new JTextArea();//text_area.setText(&&);scorll_pane=new JScrollPane(text_area); panel.add(label);
panel.add(text_field); panel.add(button);this.add(panel,BorderLayout.NORTH);this.add(scorll_pane);this.setTitle(&浏览器&);this.setIconImage((new ImageIcon(&image/ie.jpg&)).getImage());this.setSize(400,300);this.setLocation(200,150);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}public void actionPerformed(ActionEvent e){if(e.getActionCommand().equals(&search&)){r.ReadURLif();}}}class Panel extends JPanel{
//这个类在这段程序中没有任何作用public void paint(Graphics g){//但是可拓展性强,方便添加函数super.paint(g);}}
2017java学习来上市公司博为峰学java,入学即签就业协议,不就业不收费,查看java课程!java好学吗?java课程来博为峰学,java工程师就业年薪十几万!
package HomeWimport java.net.*;import java.io.*;class ReadURLif{URLURLConnection context=InputStream in=String s=public ReadURLif(){ try{url=new URL(&&);
context = url.openConnection();
in = context.getInputStream();
BufferedReader str = new BufferedReader(new InputStreamReader(in,&gbk&)); while (str.ready()) {
s = str.readLine();
System.out.println(s);
} }catch(IOException ioe){System.out.println(&IOException&);}}}
有大神没啊,
登录百度帐号推荐应用}

我要回帖

更多关于 this调用构造方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信