1.简述重载(Overload)与重写(Override)的区别。
方法的重载:必须在同一类中,方法名相同,而参数列表不同(参数类型不同,参数个数不同,参数顺序不同);
public class Person{
String name;
int age;
public Person(){
}
public Person(String name,int age){
this.name=name;
int age=age;
}
public Person(int age,String name){
this.age=age;
this.name=name;
}
}
方法的重写:只存在于子类和父类之间,子类的方法名称、输入参数必须与父类一致,返回值类型兼容(子类方法的返回值类型是父类方法返回值类型的子类),权限不能比父类更严格。重写的前提是先继承父类的方法。
package override; //父类
public class Person {
public Object getInfo(){
System.out.println("Person父类的getInfo()方法");
return "我是父类中的方法";
}
public void makeMoney(){
System.out.println("开工厂赚钱....");
}
}
package override;//子类
public class Student extends Person{
@Override
public String getInfo(){
System.out.println("子类方法");
return "学生的getInfo()方法";
}
@Override
public void makeMoney(){
System.out.println("开互联网公司赚钱....");
}
}
package override; //测试
public class TestOverride {
public static void main(String[] args) {
Student stu=new Student();
System.out.println(stu.getInfo());
}
}
2.完成刺客刺杀总统的场景,要求:刺杀成功后,将刺客的名字和总统的名字
都显示出来。
//总统类
package president;
public class President {
static String name;
public President(){
}
public President(String n){
name=n;
}
}
//刺客类
package president;
public class Assassin {
String name;
int age;
String sex;
public Assassin(){
}
public Assassin(String name,int age,String sex){
this.name=name;
this.age=age;
this.sex=sex;
}
public void assassinatePresident(President president){
System.out.println("一名"+age+"岁的"+sex+"性刺客,名叫"+name+",刺杀"+President.name+"总统成功!");
}
}
//测试类
package president;
public class Test {
public static void main(String[] args) {
Assassin ass=new Assassin("黑风",20,"男"); //利用new关键词创建刺客对象
President pre=new President("查理斯"); //利用new关键词创建总统对象
ass.assassinatePresident(pre); //调用刺杀方法,完成刺杀
}
}
3.建立一个长方形的类 包括属性,长、宽
1) 在构造方法中,给长方形的属性初始化。
2) 写两个方法,分别求出长方形的周长和面积。
3) 写一个方法,以长方形的对象为参数,求出两个长方形的周长差。
package rectangle;
public class RectangleDemo {
double len;
double width;
public RectangleDemo(){
}
public RectangleDemo(double len,double width){ //构造方法初始化对象的属性
this.len=len;
this.width=width;
}
public double calculatePerimeter(){ //计算长方形周长
double per=(this.len+this.width)*2;
System.out.println("长方形周长为:"+per);
return per;
}
public double calculateArea(){ //计算长方形面积
double ar=this.len*this.width;
System.out.println("长方形面积为:"+ar);
return ar;
}
public static void main(String[] args){ //主方法出口
RectangleDemo re1=new RectangleDemo(5.0,6.0);
RectangleDemo re2=new RectangleDemo(6.0,9.9);
re1.calculatePerimeter();
re1.calculateArea();
double errandrectangle=re1.calculatePerimeter()-re2.calculatePerimeter(); //计算周长差
if(errandrectangle>0){ //判断周长差正负
double errandrectangleresult1=errandrectangle;
System.out.println("re1与re2两个长方形的周长差为:"+errandrectangleresult1);
}else{
double errandrectangleresult2=-errandrectangle;
System.out.println("re1与re2两个长方形的周长差为:"+errandrectangleresult2);
}
}
}
4. 创建拥有继承结构的两个类,两个类拥有相同定义的show()方法,但是方法体中
的内容不同,分别创建一个父类对象和子类对象,分别调用show()方法,观察结果。
//父类
package extendsdemo;
public class Person {
int a;
public Person(){
}
public Person(int a){
this.a=a;
System.out.println("父类带参构造:"+a);
}
public void show(){
System.out.println("展示...");
}
}
//子类一
package extendsdemo;
public class ExtendsOne extends Person{
int b;
public ExtendsOne(){
super(23);
System.out.println("子类1无参构造:");
}
public ExtendsOne(int b){
this.b=b;
System.out.println("子类1带参构造:"+b);
}
public void show(){
System.out.println("以后享受多少取决于你现在努力多少!");
}
}
//子类二
package extendsdemo;
public class ExtendsTwo {
int c;
public ExtendsTwo(){
super();
System.out.println("子类2无参构造!");
}
public ExtendsTwo(int c){
this.c=c;
System.out.println("子类2带参构造:"+c);
}
public static void show(){
System.out.println("显示....");
}
}
//测试
package extendsdemo;
public class Test {
public static void main(String[] args) {
Person per=new Person(12); //创建一个父类对象
ExtendsOne o=new ExtendsOne(11); //创建子类一对象
ExtendsTwo t=new ExtendsTwo(); //创建子类二对象
per.show(); //父类对象调用show()方法
o.show(); //子类一对象调用show()方法
t.show(); //子类二对象调用show()方法
}
}