import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Project2 extends JFrame {
wdmb4 mb=null;
public Project2(){
mb=new wdmb4();
mb.setBackground(Color.yellow);//这样的话这句代码可以执行
this.add(mb);
this.setTitle("");
this.setSize(600,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args){
Project2 pro=new Project2();
}
}
class wdmb4 extends JPanel{ //public void paint(Graphics g){
//super.paint(g);
//System.out.println("print方法被运行");
//}
}
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Project2 extends JFrame {
wdmb4 mb=null;
public Project2(){
mb=new wdmb4();
mb.setBackground(Color.yellow);//使用super语句,这样的话这句代码也可以执行
this.add(mb);
this.setTitle("");
this.setSize(600,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args){
Project2 pro=new Project2();
}
}
class wdmb4 extends JPanel{ public void paint(Graphics g){
super.paint(g);
System.out.println("print方法被运行");
}
}
但是
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Project2 extends JFrame {
wdmb4 mb=null;
public Project2(){
mb=new wdmb4();
mb.setBackground(Color.yellow);//这样的话这句代码,就不执行
this.add(mb);
this.setTitle("");
this.setSize(600,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args){
Project2 pro=new Project2();
}
}
class wdmb4 extends JPanel{ public void paint(Graphics g){
//super.paint(g);
System.out.println("print方法被运行");
}
}
这是什么原因,
继承之后,不重写paint方法,可以访问mb.setBackground(Color.yellow);
而重写之后为什么必须要写super语句?????
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Project2 extends JFrame {
wdmb4 mb=null;
public Project2(){
mb=new wdmb4();
mb.setBackground(Color.yellow);//这样的话这句代码可以执行
this.add(mb);
this.setTitle("");
this.setSize(600,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args){
Project2 pro=new Project2();
}
}
class wdmb4 extends JPanel{ //public void paint(Graphics g){
//super.paint(g);
//System.out.println("print方法被运行");
//}
}
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Project2 extends JFrame {
wdmb4 mb=null;
public Project2(){
mb=new wdmb4();
mb.setBackground(Color.yellow);//使用super语句,这样的话这句代码也可以执行
this.add(mb);
this.setTitle("");
this.setSize(600,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args){
Project2 pro=new Project2();
}
}
class wdmb4 extends JPanel{ public void paint(Graphics g){
super.paint(g);
System.out.println("print方法被运行");
}
}
但是
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Project2 extends JFrame {
wdmb4 mb=null;
public Project2(){
mb=new wdmb4();
mb.setBackground(Color.yellow);//这样的话这句代码,就不执行
this.add(mb);
this.setTitle("");
this.setSize(600,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args){
Project2 pro=new Project2();
}
}
class wdmb4 extends JPanel{ public void paint(Graphics g){
//super.paint(g);
System.out.println("print方法被运行");
}
}
这是什么原因,
继承之后,不重写paint方法,可以访问mb.setBackground(Color.yellow);
而重写之后为什么必须要写super语句?????
解决方案 »
- 问问,为什么windows操作系统会有个CMd.exe?
- 有关Properties 问题
- 主线程创建了子线程,如何让主线程退出,而子线程仍然运行?
- [求助]在applet中,转义符,是不是都不起作用?
- Java连接数据库
- 关于CDMA MODEM短信编码问题 (超级终端 smslib)
- 寻求 UltraEdit 10.00a 的注册码,谢谢!
- 急于求教
- 虚心请教,如何处理JComboBox的事件?cb.addItemListener(this);这句话为什么错了。急急急!!
- 鄙人愚钝,请高人明示有关weblogic中连接池与数据源的配置。
- Java 开启线程的基本方式
- java多线程中,锁不起作用?
从控制台的输出看paint()方法被调用了,那么LZ的这几个程序正说明了setBackground()方法调用了paint()方法并通过paint()方法实现JPanel背景颜色的绘制;而LZ在wdmb4类重写了paint()方法,setBackground()又调用的是wdmb4中的paint()方法,所以背景颜色不变,这里的paint()方法的作用只是输出一句话。要绘制背景颜色,就要调用父类的paint()方法,即
super.paint(g);
setBackground()方法不是Jpanel父类的方法,继承之后可以用子类对象调用;
还有我自API文档中看到,要使用轻级组件,就要调用super方法
要学习的知识很多
还请多多请教
你可以调用super.paint()去执行.重写方法本来就是为了要执行另外的东西,你不执行,你可以按父类的行为去执行
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
子类 子类对象=new 子类();
子类对象.请说话();
}
}
class 父类
{
public void 说话(){
System.out.println("父类说话,你好");
}
public void 请说话(){
说话();
}
}
class 子类 extends 父类
{
public void 说话(){
//不想说,让父类说
super.说话();
}
}
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
子类 子类对象=new 子类();
子类对象.请说话();
}
}
class 父类
{
public void 说话(){
System.out.println("父类说话,你好");
}
public void 请说话(){
说话();
}
}
class 子类 extends 父类
{
public void 说话(){
//不想说,让父类说
//super.说话();
//拦截了,不让说,或者说自己的话
System.out.println("子类说自己的话....");
}
}
setBackground()方法不是Jpanel父类的方法,继承之后可以用子类对象调用;
还有我自API文档中看到,要使用轻级组件,就要调用super方法
要学习的知识很多
还请多多请教指教不敢,楼下说得也很明白,就是说当一个方法被覆写了之后,它就是一个全新的方法,如果想执行父类的同名方法,就要去特意调用父类的那个方法;当然,如果这个方法没被覆写,那子类的该方法就和父类的该方法的内容相同。