1.写出程序结果
package com.feifan.javaoop.day4;
public class Fu {
boolean show(char a){ // 判断是否char类型
System.out.println(a);
return true;
}
}
class Demo extends Fu{
public static void main(String[] args){
int i=0;
Fu f=new Demo(); //父类引用指向子类方法
Demo d=new Demo();
for(f.show('A'); f.show('B')&&(i<2);f.show('C')) {
i++;
d.show('D');
}
// A B D C B D C B
}
}
package com.feifan.javaoop.day4;
public class Fu {
boolean show(char a){
System.out.println(a);
return false;
}
}
class Demo extends Fu{
public static void main(String[] args){
int i=0;
Fu f=new Demo(); //父类引用指向子类方法
Demo d=new Demo();
for(f.show('A'); f.show('B')&&(i<2);f.show('C')) {
i++;
d.show('D');
}
// A B
}
}
2、写出程序结果:
package com.feifan.javaoop.day4;
class Fu{
int num=4;
void show(){
System.out.println("showFu");
}
}
class Zi extends Fu{
int num=5;
@Override
void show(){
System.out.println("showZi");
}
}
class T{
public static void main(String[] args){
Fu f=new Fu ();
Zi z=new Zi();
Fu f1 = new Zi();//父类引用指向子类对象 //showfi
System.out.println(f.num); //4
System.out.println(z.num); //5
System.out.println(f1.num); //4
f.show(); //showfu
z.show(); //showzi
}
}
2、继承 多态练习
1、定义一个人类 , 包含一个country属性,speak()方法
派生一个中国人和美国人类,
两种人说话方式语言不同
package com.feifan.javaoop.day4;
/*
1、定义一个人类 , 包含一个country属性,speak()方法
派生一个中国人和美国人类,
两种人说话方式语言不同
*/
public class Person {
public String country;
//构造方法
public Person(){
super();
}
public void Speak(){
System.out.println("人说话");
}
}
package com.feifan.javaoop.day4;
public class Chinese extends Person{
//构造方法
public Chinese(){
super();
super.country = "中国";
}
@Override
public void Speak() {
super.Speak();
System.out.println("人说中文");
}
}
package com.feifan.javaoop.day4;
//--------------------------------------------------
public class American extends Person{
//构造方法
public American(){
super();
super.country = "美国";
}
@Override
public void Speak() {
super.Speak();
System.out.println("人说英文");
}
}
package com.feifan.javaoop.day4;
public class TestPerson {
public static void main(String[] args) {
Chinese chinese = new Chinese();
American american = new American();
System.out.println(chinese.country); //中国
System.out.println(american.country); // 美国
chinese.Speak(); //中国人说中文 子类继承重写父类方法,父类方法先会运行,然后执行子类重写的方法,子类重写的方法并不覆盖父类方法
american.Speak(); // 美国人说英语
}
}
2、
编写一个Person抽象类,要求含有姓名(name)年龄(age)两个私有属性以及吃饭(eat) 和睡觉(sleep)两个抽象方法,
并写出带参构造方法,创建学生(student)和工人(worker) 两个类,继承Person类,学生类多出了私有属性学号和学习方法(输出我爱学习),
工 人类多出了私有属性工号和工作方法(输出我爱工作),在主函数中创建学生和工人类 的实例对象,使用构造方法赋值,并输出所有属性和方法
package com.feifan.javaoop.day4;
public class Student extends Person1 {
private String studentName;
public Student(){
super();
}
//如果是private方法怎么访问?
public void LearnWay(){
System.out.println("我爱学习");
}
//重写父类方法
@Override
public void eat() {
System.out.println("学生吃饭");
}
@Override
public void sleep() {
System.out.println("学生睡觉");
}
}
package com.feifan.javaoop.day4;
import com.feifan.javaoop.day3.WindowDemo;
public class Worker extends Person1{
private String workerNumber;
public Worker(){
super();
}
public void workerWay(){
System.out.println("我爱工作");
}
//重写父类方法
@Override
public void eat() {
System.out.println("工人吃饭");
}
@Override
public void sleep() {
System.out.println("工人睡觉");
}
}
package com.feifan.javaoop.day4;
public abstract class Person1 {
//声明变量
private String name;
private int age;
//带参构造方法
public Person1(String name,int age) {
super();
setName(name);
getName();
setAge(age);
getAge();
}
public Person1() {
super();
}
//声明方法
public abstract void eat();
public abstract void sleep();
//private 属性 外界访问入口
public void setName(String name) {
this.name = name;
System.out.println("set方法中name:"+name);
}
public String getName() {
System.out.println("get方法中name:"+name);
return name;
}
public void setAge(int age) {
this.age = age;
System.out.println("set方法中age:"+age);
}
public int getAge() {
System.out.println("get方法中age:"+age);
return age;
}
}
package com.feifan.javaoop.day4;
public class TestPerson1 {
public static void main(String[] args) {
/* Person1 person1 = new Person1("DAM","12") {
}
System.out.println(person1);*/
Student student = new Student();
Worker worker = new Worker();
student.LearnWay();
worker.workerWay();
student.setName("小宋");
student.setAge(20);
worker.setName("小王");
worker.setAge(12);
System.out.println(student.getName());
System.out.println(student.getAge());
System.out.println(worker.getName());
System.out.println(worker.getAge());
student.eat();
student.sleep();
worker.eat();
worker.sleep();
}
}

3、
按要求编写一个Java应用程序:
(1)定义一个抽象类CanCry,描述会吼叫的方法public void cry()。
(2)分别定义狗类(Dog)和猫类(Cat),实现CanCry接口。实现方法的功能分别为:打印输出“我是狗,我的叫声是汪汪汪”、“我是猫,我的叫声是喵喵喵”。
(3)定义一个主类Test,
①定义一个void makeCry(CanCry c)方法,其中让会吼叫的动物吼叫。
②在main方法中创建狗类对象(dog)、猫类对象(cat)、Test类对象(t),用t调用makecry方法,让狗和猫吼叫。
package com.feifan.javaoop.day4.polymorphicPractice;
/*
多态----喂不同动物,动物吃食物
本例——让不同动物吼,动物吼叫方法
使用多态:
*/
public class Test {
public static void main(String[] args) {
CanCry dog = new Dog();
CanCry cat = new Cat();
Test test = new Test();
test.makeCry(dog);
test.makeCry(cat);
}
public void makeCry(CanCry canCry) {
System.out.println("让会吼叫的动物吼叫");
canCry.cry();
//加判断
if(canCry instanceof Cat) { //如果输入的canCry是Cat的实例 true
//需要调用子类cat的特有方法 drop
System.out.println("调用猫的特有方法drop ");
Cat cat = (Cat) canCry;
cat.drop();
}
}
/*
我是狗,我的叫声是汪汪汪
让会吼叫的动物吼叫
我是猫,我的叫声是喵喵喵
调用猫的特有方法drop
cat drop
*/
}
public abstract class CanCry {
public CanCry(){
super();
}
public abstract void cry();
}
package com.feifan.javaoop.day4.polymorphicPractice;
public class Cat extends CanCry {
public Cat(){
super();
}
//cat特有方法
public void drop(){
System.out.println("cat drop");
}
@Override
public void cry() {
System.out.println("我是猫,我的叫声是喵喵喵");
}
}
package com.feifan.javaoop.day4.polymorphicPractice;
/*
多态----喂不同动物,动物吃食物
本例——打印不同动物,动物哭
*/
public class Dog extends CanCry{
public Dog(){
super();
}
@Override
public void cry() {
System.out.println("我是狗,我的叫声是汪汪汪");
}
}
package com.feifan.javaoop.day4.polymorphicPractice;
/*
多态----喂不同动物,动物吃食物
本例——让不同动物吼,动物吼叫方法
未使用多态的时候:
*/
public class TestCanCry {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
TestCanCry testCanCry = new TestCanCry();
testCanCry.DogCry(dog);
testCanCry.CatCry(cat);
}
public void DogCry(Dog dog){
System.out.println("让会吼叫的动物吼叫");
dog.cry();
}
public void CatCry(Cat cat){
System.out.println("让会吼叫的动物吼叫");
cat.cry();
}
}
/*
让会吼叫的动物吼叫
我是狗,我的叫声是汪汪汪
让会吼叫的动物吼叫
我是猫,我的叫声是喵喵喵
*/
本文通过多个示例深入探讨了Java中的多态与继承概念。包括不同类型的对象调用方法的行为、父类引用指向子类对象的情况以及抽象类和接口的应用等。
1万+

被折叠的 条评论
为什么被折叠?



