错误点一(构造函数)
基础语法错误吧
public class Penguin extends animal{
private String sex;
public Output(String name,int health,int love){
super(name);
super(health);
System.out.println("我的名字是"+name+"我的健康值为"+health
+"我和主人的亲密度为"+love+"我是"+sex);
}
构造方法是类里的一个特殊的方法,不能有返回值(包括void)。所以当编译器反复报错“方法访问无效,需要返回类型”的时候,懵.....后来才发现方法名没有和类同名.....(大小写也要严格遵守)
public penguin(String name,int health,int love)
JAVA构造方法
- 构造方法
一般首字母大写
- 方法调用
实例化类的时候就实现了
Penguin penguin_1 = new Penguin("鹅蛋",100,0);
- 方法重载
一个类中可以有多个构造方法,此为方法重载。
a.方法名相同
b.参数列表不同
public Penguin (){
//不含参数构造方法
}
public void Penguin(){
//有返回类型,不是构造方法
}
public Penguin(String name){
}
public Penguin(String name,int health){
//方法重载
}
- 关于构造函数的默认声明
首先如果在类里不声明一个构造函数,java会给该类默认一个构造函数,并且该构造函数的权限是随着类的改变而改变的(类为public,构造函数也为public;类改为private,构造函数也改为private);而当该类一旦声明了构造函数以后,java 是不会再给该类分配默认的构造函数。就是说,一旦你声明了构造函数,并且该构造函数有形参,那么你就不能pen ipen=new pen();像这样声明一个对象了。
- this.length(创建该对象成员变量)
this函数的意思就是对当前对象的引用。this.length的意思就是该对象的length- this(length)(调用构造方法)
构造方法在类里不能像其他方法一样调用,只能通过this(参数列表)调
作者:光哥很霸气
链接:https://www.jianshu.com/p/c2300404c331
來源:简书
错误点二(super 用法)
Java中this和super的用法总结(作者写的真清晰)
本次作业
//父类
public class animal {
private String name ="无名氏";
private int health =100;
private int love = 0;
public animal(int health){
if(health>=100||health<0){
this.health = 40;
System.out.println("请输入正确的健康值");
}
else
this.health = health;
}
public animal(String name){
this.name = name;
}
public void print() {
System.out.println("宠物的自白:\n我的名字叫" +
this.name + ",我的健康值是" + this.health
+ ",我和主人的亲密程度是" + this.love + "。");
}
}
//三个子类,猫狗鹅
public class Cat extends animal{
String strain;
public Cat(String name,String strain) {
super(name);
this.strain = strain;
}
public void settleStrain(String strain){
this.strain = strain;
}
public void print(){
super.print();
System.out.println("我是一只"+strain+"猫猫。");
}
}
public class Dog extends animal{
String strain;
public Dog(String name,String strain) {
super(name);
this.strain = strain;
}
public void settleStrain(String strain){
this.strain = strain;
}
public void print(){
super.print();
System.out.println("我是一只"+strain+"狗狗");
}
}
public class Penguin extends animal{
private String sex;
//String name;
public Penguin(String name,String sex){
super(name);
this.sex = sex;
}
public void settleSex(String sex){
this.sex = sex;
}
public void print(){
super.print(); //调用父类的print方法
System.out.println("我是一只 " + this.sex + "鹅。");
}
}
public static void main(String[] args) {
// TODO code application logic here
String strainDog;
String strainCat;
String sex;
System.out.println("欢迎来到宠物店!\n"
+ "请给宠物取个名:");
Scanner input = new Scanner(System.in);
String name = input.next();
System.out.println("请选择领养宠物的种类(1.狗狗 2.企鹅 3.猫猫");
int Choice = input.nextInt();
switch(Choice){
case 1:
System.out.println("请说出狗的品种");
strainDog = input.next();
Dog dog = new Dog(name,strainDog);
dog.print();
break;
case 2:
System.out.println("请选择企鹅性别1.Q仔 2.Q妹");
int sexChoice = input.nextInt();
if(sexChoice==1){
sex ="Q仔";
}
else
sex = "Q妹";
Penguin penguin = new Penguin(name,sex);
penguin.print();
break;
case 3:
System.out.println("请说出猫的品种");
strainCat = input.next();
Cat cat = new Cat(name,strainCat);
cat.print();
break;
}
}
}