1.this:表示当前引用,常用于形参或局部变量与类的成员变量同名的情况下。表示当前对象。调用当前类的构造方法。super:子类的数据成员和成员方法与父类的数据成员和成员方法重名,需要调用super来指明。super(参数)表示调用父类的构造方法。
2.调用父类的构造方法,再进行自己构造函数后面的语句。
3.域变量进行默认初始化,再进行初始化语句,再进行构造函数的赋值,局部变量只能通过赋值进行初始化。
4.
abstract class people{
public abstract void show();
}
class teacher extends people{
public void show(){
System.out.println(1);
}
}
引用:
people a=new teacher;
5.通用可扩展代码,体现了多态。
package run;
interface wa{
public static final int a=0;
void show();
}
class te implements wa{
public void show() {
System.out.println(1);
}
}
public class ru{
public static void main(String[] args) {
wa y=new te();
y.show();
}
}
6.接口和抽象类的区别:
(1)抽象类可以有构造方法,接口中不能有构造方法。(2)抽象类中可以有普通成员变量,接口中没有普通成员变量(3)抽象类中可以包含静态方法,接口中不能包含静态方法(4) 一个类可以实现多个接口,但只能继承一个抽象类。(5)接口可以被多重实现,抽象类只能被单一继承(6)如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法
接口和抽象类的相同点:(1) 都可以被继承(2) 都不能被实例化(3) 都可以包含方法声明(4) 派生类必须实现未实现的方法
7.是否指向一个对象(equals(),使用“==”比较),instanceof判断类是否为特定类的事例。
8.内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据;内部类可以对同一个包中的其他类隐藏;当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。减少代码量,只调用一次的时候可以用。类非常小(4行代码以下)。类在定义后马上用到。只用到类的一个实例
9.D
10.父类和子类有数据成员名相同,父类的数据成员被隐藏。父类和子类拥有相同名字的属性或者方法( 方法隐藏只有一种形式,就是父类和子类存在相同的静态方法)时,父类的同名的属性或者方法形式上不见了,实际是还是存在的。被覆盖的方法,在子类被强制转换成父类后,调用的还是子类自身的方法子类要是想访问父类的方法,可以使用super关键字。被隐藏的属性,在子类被强制转换成父类后,访问的是父类中的属性在无强制转换时子类要访问父类的属性使用super关键字。
11.1、5.
12
package run;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
class Listener implements KeyListener
{
private myApplet mya; //myApplet对象引用
public Listener(myApplet a){
this.mya = a;
}
public void keyPressed(KeyEvent arg0) {
}
public void keyReleased(KeyEvent arg0) {
}
public void keyTyped(KeyEvent ke) {
//mya.l.setText(mya.input.getText()+ke.getKeyChar());
mya.c = ke.getKeyChar();
mya.refresh();
}
};
public class myApplet extends Applet
{
public TextField input; //修改为public
char c;
Label l = new Label();
public void init()
{
input = new TextField(10);
add(input);
add(l);
input.addKeyListener(new Listener(this));
}
public void paint(Graphics g)
{
//l.setText(input.getText()+c);
g.drawString("您输入了字符:"+c,10,50);
}
//增加刷新方法进行刷新
public void refresh(){
repaint();
}
}
1.先执行父类的域变量初始化字段,父类的构造函数,子类的域变量初始化字段,子类的构造函数。
2.相互引用。
3.继承是子类继承父类,父类的所有属性和方法都可以被子类访问和调用。组合是指将已存在的类型作为一个新建类的成员变量类型,两个类之间无上下级关系。当你只需要使用另外一个类的方法时使用组合。但是如果你需要使用另外一个类的作用时但你不想被其他的类访问用继承。
4.方法重载是编译时多态,方法覆盖表现出两种多态性,当对象引用本类实例时,为编译时多态,否则为运行时多态。
参考链接:添加链接描述
5.
package run;
import java.awt.*;
import java.applet.*;
interface Shapes
{
abstract public double getArea();
abstract public double getPerimeter();
}
class Rect implements Shapes
{
int k=1,m=1,x,y;
public double getArea()
{ return(k*m); }
public double getPerimeter()
{ return(2*k+2*m);}
public Rect(int x,int y,int width,int height)
{ this.k=width;
this.m=height;
this.x=x;
this.y=y;
}
}
class Triangle implements Shapes
{
int k=1,x,y;
double m=1;
public double getArea()
{return(Math.sqrt(m*( m-k)*( m-x)*(m-y)));}
public double getPerimeter()
{return(k+x+y);}
public Triangle(int baseA,int baseB,int baseC)
{
this.k=baseC;
this.m=0;
this.x=baseA;
this.y=baseB;
//m充当了周长的一半
m= (baseA+ baseB+ baseC)/2.0;
}
}
class Circle implements Shapes
{
int k=1,x,y;
double m=1;
public double getArea()
//Math是java.lang包中的类,PI是静态其属性,其值为Π
{return(m* m *Math.PI);}
public double getPerimeter()
{return(2*Math.PI* m);}
public Circle(int x,int y,int width)
{
//m充当了半径的角色,k充当了直径
this.k=width;
this.m=width/2.0;
this.x=x;
this.y=y;
}
}
public class RunShape extends Applet
{ Rect rect=new Rect(5,15,25,25);
Triangle tri=new Triangle(5,5,8);
Circle cir =new Circle(13,90,25);
public void paint(Graphics g)
{
//绘制矩形,输出矩形的面积和周长
g.drawRect(rect.x,rect.y,rect.k,(int)rect.m);
g.drawString("Rect Area:"+rect.getArea(),50,35);
g.drawString("Rect Perimeter:"+rect.getPerimeter(),50,55);
//输出三角形的面积和周长
g.drawString("Triangle Area:"+tri.getArea(),50,75);
g.drawString("Triangle Perimeter:"+tri.getPerimeter(),50,95);
//绘制圆,输出圆的面积和周长
g.drawOval(cir.x-(int)cir.k/2,cir.y-(int)cir.k/2,cir.k,cir.k);
g.drawString("Circle Area:"+cir.getArea(),50,115);
g.drawString("Circle Perimeter:"+cir. getPerimeter(),50,135);
}
}
6.二元运算符,boolean result=object instanceof class判断对象是否为特定类的实例。