概述
49.super的使用
子类访问父类成员
- 访问父类方法:例:super.print();
super可以调用父类的非private方法
- 访问父类属性:例:super.name;
super不可以调用父类的private属性
super可以调用父类的非private属性
- 访问父类构造方法:例1:super(); 例2:super(name);
通过super调用父类的构造方法
super();注意参数顺序必须和父类一致
50.super总结
super关键字来访问父类的成员
- 使用super关键字,super代表父类对象
- super只能出现在子类的方法和构造方法中
- super调用构造方法时,只能是第一句
- super不能访问父类的private成员
51.super的使用场景
- 子类方法重写父类方法
- 在子类中定义了和父类同名的成员变量
子类会覆盖父类的同名成员
可使用super调用父类被子类覆盖的同名成员(super可以是被屏蔽的成员可见)
//父类,提取共性代码Pet类
public class Pet {
//1.隐藏属性(添加private)
//昵称,默认值是“无名氏”
private String name="无名氏";
//1.health属性不被用户访问到 2.程序编写过程中要能控制health的赋值--方法中
/*if(this.health<0||this.health>100){
System.out.println("请输入0-100的值!");
this.health=60;
}else{
this.health=health;
}*/
//健康值,默认值是100,健康值在0-100之间,小于60为不健康
private int health=100;
//亲密度
private int love=0;
int age=5;
public Pet(){
System.out.println("父类无参构造方法");
}
public Pet(String name){
this.name=name;
}
public Pet(String name,int health,int love){
//this(name); //this可调用本类的构造方法,且必须在第一行
this.name=name;
this.health=health;
this.love=love;
System.out.println("父类的带参构造方法");
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//2.添加属性的setter/getter方法(方法公开),并加入属性控制语句
//setter:1.属性赋值。2.属性的操作(正确判断等)
public void setHealth(int health){
if(health<0||health>100){
System.out.println("请输入0-100的值!");
this.health=60;
return;
}
this.health=health;
}
//getter:属性取值
public int getHealth(){
return this.health;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getLove() {
return this.love;
}
public void setLove(int love) {
if(love<0||love>100){
System.out.println("请输入0-100的值!");
this.love=60;
return;
}
this.love=love;
}
/**
* 输出宠物的信息
* */
public void print(){
System.out.println("宠物的自白:n我的名字叫"+this.name+",健康值为"+this.health+
",和主人的亲密度为"+this.love+"。");
// if(this.health<0||this.health>100){
// System.out.println("请输入0-100的值!");
// this.health=60;
// }else{
// this.health=health;
// }
}
}
/*
* 宠物企鹅类Penguin类
* */
public class Penguin extends Pet {
//性别
private String sex="Q仔";
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public void print(){
//调用父类的print()
super.print();
System.out.println(",我的性别是:"+this.sex);
}
}
/*
* 宠物狗狗类Pet类
* */
import java.sql.SQLOutput;
/*
* 宠物狗狗类
* */
public class Dog extends Pet{
//品种
private String strain="聪明的拉布拉多犬";
private int age=3;
public Dog(){
System.out.println("子类狗狗的无参构造方法");
}
public Dog(String name,int health,int love,String strain){
//通过super调用父类的构造方法,必须是第一行
//super();注意参数顺序必须和父类一致
super(name,health,love);
this.strain=strain;
System.out.println("子类狗狗的带参构造方法");
}
public String getStrain() {
return this.strain;
}
public void setStrain(String strain) {
this.strain = strain;
}
public void print(){
//调用父类的非private方法print()
super.print();
System.out.println(",我是一只:"+this.strain);
}
public void m1(){
/*//super不可以调用父类的private属性
System.out.println(super.name);*/
//super可以调用父类的非private属性
System.out.println(super.age);
}
public void m2(){
//子类会覆盖父类的同名成员
System.out.println(this.age);
//可使用super调用父类被子类覆盖的同名成员
System.out.println(super.age);
}
}
//宠物测试类TestPet类
import java.util.Scanner;
//宠物测试类
public class TestPet {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("欢迎来到宠物店!");
System.out.println("请输入您要领养宠物的名字:");
String name = input.next();
System.out.println("请输入您要领养的宠物类型:1.狗狗 2.企鹅");
int typeNo = input.nextInt();
switch (typeNo) {
case 1:
/* //接受用户键盘输入值
System.out.println("请输入宠物的健康值:");
int ghealth = input.nextInt();
System.out.println("请输入宠物与主人的亲密度:");
int glove = input.nextInt();
System.out.println("请输入宠物的品种:");
String strain = input.next();
//创建狗狗对象,并为狗狗属性赋值
Dog dog = new Dog();
dog.setName(name);
*//*dog.health=-1000;*//*
dog.setHealth(ghealth);
System.out.println(dog.getHealth());
*//*伪代码
do{
dog.health=-1000;
System.out.println("请输入0-100之间的数值!");
}while(dog.health>0||dog.health<100);*//*
*//*dog.love=3;
dog.name="多多";
dog.strain="吉娃娃";*//*
dog.setLove(glove);
dog.setStrain(strain);
dog.print();
dog.m1();*/
Dog dog=new Dog("狗蛋",244,23,"二哈");
dog.print();
dog.m2();
break;
case 2:
//接受用户键盘录入值
System.out.println("请选择宠物的性别:1.Q妹 2.Q仔");
int sexId = input.nextInt();
String sex = (sexId == 1) ? "Q妹" : "Q仔";
System.out.println("请输入宠物的健康值:");
int qhealth = input.nextInt();
System.out.println("请输入宠物和主人的亲密度:");
int qlove = input.nextInt();
//创建企鹅对象,并为企鹅属性赋值
Penguin p = new Penguin();
/*p.health=-1000;
p.love=3;
p.name="Q仔";
p.sex="男";*/
p.setName(name);
p.setHealth(qhealth);
p.setLove(qlove);
p.setSex(sex);
p.print();
break;
default:
System.out.println("暂时没有这个类型的宠物,请在1或者2之间选择数值输入!");
break;
}
}
}
最后
以上就是清爽哑铃为你收集整理的super的使用//父类,提取共性代码Pet类/* * 宠物企鹅类Penguin类 * *//* * 宠物狗狗类Pet类 * *///宠物测试类TestPet类的全部内容,希望文章能够帮你解决super的使用//父类,提取共性代码Pet类/* * 宠物企鹅类Penguin类 * *//* * 宠物狗狗类Pet类 * *///宠物测试类TestPet类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复