java基于控制台宠物养成 java游戏宠物
面向对象高级部分的学习建议
1、多关注语法的基本作用
2、多思考、练习、记忆
3、要自信,后面用起来就会了
一、static
1、static修饰成员变量static :叫静态,可以修饰成员变量、成员方法。
成员变量按照有无static修饰,分为两种:
●类变量(静态变量):有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享(一个对象改了所有对象都改了)。
●实例变量(对象的变量):无static修饰,属于每个对象的。
public class Student {
static String nome;
int age;
}
访问方法
类名.类变量(推荐)
对象.类变量(不推荐)
对象.实例变量(只能用对象调)
●在开发中, 如果某个数据只需要一份,且希望能够被共享(访问、修改),则该数据可以定义成类变量来记住。
案例导学:
●系统启动后,要求用户类可以记住自己创建了多少个用户对象了。
访问自己类中的类变量,是否可以省略类名不写?
●可以的
●注意:在某个类中访问其他类里的类变量,必须带类名访问
类方法:有static修饰的成员方法,属于类。
public static void printHelloWorld(){
System.out.println("Hello World!");
System.out.println("Hello World!");
}
实例方法:无static修饰的成员方法,属于对象。
public void printPass(){
...
}
访问方法
类名.类方法(推荐)
对象.类方法(不推荐)
对象.实例方法(只能用对象调)
1.类方法有啥应用场景?
●可以用来设计工具类。
2.工具类是什么,有什么好处?
●工具类中的方法都是类方法,每个类方法都是用来完成-一个功能的。
●提高了代码的复用性;调用方便,提高了开发效率。
3.为什么工具类要用类方法,而不是用实例方法?
●实例方法需要创建对象来调用,会浪费内存。
4.工具类定义时有什么要求?
●工具类不需要创建对象, 建议将工具类的构造器私有化。
●类方法中可以直接访问类的成员,不可以直接访问实例成员。
●实例方法中既可以直接访问类成员,也可以直接访问实例成员。
●实例方法中可以出现this关键字,类方法中不可以出现this关键字的。(主要因为用类调用时不知道指向哪个对象)
代码块概述
●代码块是类的5大成分之一(成员变量、构造器、方法、代码块、内部类)。
代码块分为两种:
●静态代码块:
➢格式: static{}
➢特点: 类加载时自动执行,由于类只会加载一次, 所以静态代码块也只会执行一次。
➢作用: 完成类的初始化, 例如:对类变量的初始化赋值。
●实例代码块:
➢格式: {}
➢特点: 每次创建对象时,执行实例代码块,并在构造器前执行。
➢作用: 和构造器- -样,都是用来完成对象的初始化的,例如:对实例变量进行初始化赋值。
快捷键:按住CTRL点击程序类可以点进去。
7、static的应用知识:单例设计模式什么是设计模式(Design pattern) ?
●一个问题通常有n种解法,其中肯定有一种解法是最优的,这个最优的解法被人总结出来了 ,称之为设计模式。
●设计模式有20多种, 对应20多种软件开发中会遇到的问题。
关于设计模式的学习,主要学什么?
01 解决什么问题?
02 怎么写?
单例设计模式
●确保一个类只有一个对象。
写法
●把类的构造器私有。
●定义一个类变量记住类的一个对象。
●定义一个类方法,返回对象。
单例模式的应用场景和好处?
Runtime 和电脑的任务管理器都只需要运行一次
饿汉式单例的特点:在获取类的对象时,对象已经创建好了。
懒汉式单例设计模式
●拿对象时,才开始创建对象。
写法
●把类的构造器私有。
●定义一个类变量用于存储对象。
●提供一个类方法,保证返回的是同一个对象。
二、继承
1、继承快速入门什么是继承呢?
●Java中提供了一个关键字extends,用这个关键字,可以让一个类和另一个类建 立起父子关系。
继承的特点
● 子类能继承父类的非私有成员(成员变量、成员方法)。
继承后对象的创建
●子类的对象是由子类、父类共同完成的。继承的好处:减少重复代码的编写,提高代码复用性
用来限制类中的成员(成员变量、成员方法、构造器、代码块...能够被访问的范围。
2)单继承、Object类Java是单继承的,Java中的类不支持多继承(不能多父,怕方法重复不知道继承哪个),但是支持多层继承(可以爷孙)。
object类 是java所有类的祖宗类。我们写的任何一个类,其实都是object的子类或子孙类。
3)方法重写(声明不变,重新实现)●当子类 觉得父类中的某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这就是方法重写。
●注意: 重写后,方法的访问,Java会遵循就近原则。
方法重写的其它注意事项
●重写小技巧:使用@Override注解,他可以指定java编译器,检查我们方法重写的格式是否正确,代码可读性也会更好。
●子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限( public > protected>缺省)。
●重写的方法返回值类型, 必须与被重写方法的返回值类型一样,或者范围更小。
●私有方法、静态方法不能被重写,如果重写会报错的。
1、在子类方法中访问其他成员(成员变量、成员方法) ,是依照就近原则的。
●先子类 局部范围找。
●然后子类成员范围找。
●然后父类成员范围找, 如果父类范围还没有找到则报错。
2、如果子父类中,出现了重名的成员,会优先使用子类的,如果此时一定要在 子类中使用父类的怎么办?
●可以通过super关键字,指定访问父类的成员: super.父类成员变量/父类成员方法
子类构造器的特点:
●子类的全部构造器, 都会先调用父类的构造器,再执行自己。
子类构造器是如何实现调用父类构造器的:
●默认情况下,子类全部构造器的第一 行代码都是super() (写不写都有),它会调用父类的无参数构造器。
●如果父类没有无参 数构造器,则我们必须在子类构造器的第一行手写super(...). 指定去调用父类的有参数构造器。
补充知识: this(..)调 用兄弟构造器
任意类的构造器中,是可以通过this(..)去调用该类的其他构造器的。
this...)和super(..)使用时的注意事项:
●this(..) 、super(..) 都只能放在构造器的第一-行, 因此,有了this(..)就不能写super(..)了,反之亦然。
三、多态
什么是多态?●多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态。
多态的具体代码体现
多态的前提
1有继承/实现关系;
2存在父类引用子类对象;
3存在方法重写(@Override)。
方法变多态,变量同父类不变。
多态的一个注意事项
●多态是对象、 行为的多态, Java中的属性(成员变量)不谈多态。
多态的好处
1.在多态形式下,右边对象是解耦合的,更便于扩展和维护。
2.定义方法时,使用父类类型的形参,可以接收一切子类对象,扩展性更强、更便利。
多态下会产生的一一个问题,怎么解决?
●多态下不能使用子类的独有功能。
●自动类型转换:父类变量名= new子类();
●强制类型转换: 子类变量名=(子类)父类变量「例如Teachert=(Teacher)p;
强制类型转换的- -个注意事项
●存在 继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错。
●运行时, 如果发现对象的真实类型与强转后的类型不同,就会报类型转换异常(ClassCastException) 的错误出来。
People p = new Teacher();
Student s = (Student) p; // java. Lang. CLassCastException
强转前,Java建议:
●使用instanceof关键字, 判断当前对象的真实类型,再进行强转。
四、final
●final 关键字是最终的意思,可以修饰(类、方法、变量)
●修饰类: 该类被称为最终类,特点是不能被继承了。
●修饰方法: 该方法被称为最终方法,特点是不能被重写了。
●修饰变量:该变量只能被赋值一次。
常量
●使用了static final修饰的成员变量就被称为常量;
●作用:通常用于记录系统的配置信息。
public class Constant {
public static final String SCHOOL_ NAME = “传智教育";
}
注意!常量名的命名规范:建议使用大写英文单词,多个单词使用下划线连接起来。
使用常量记录系统配置信息的优势、执行原理
●代码可读性更好,可维护性也更好。
●程序编译后,常量会被“宏替换":出现常量的地方全部会被替换成其记住的字面量,这样可以保证使用常量和直接用字面量的性能是一样的。
五、抽象类(提取,实例重写功能)
1、定义●在Java中有一个关键字叫: abstract, 它就是抽象的意思,可以用它修饰类、成员方法。
●abstract修饰类, 这个类就是抽象类;修饰方法,这个方法就是抽象方法。
修饰符abstract class类名{
修饰符abstract返回值类型方法名称(形参列表);
}
public abstract class A {
//抽象方法:必须abstract修饰, 只有方法签名,不能有方法体。
publ1ic abstract void test();
}
●抽象类中不一-定有抽象方法,有抽象方法的类一定是抽象类。
●类该有的成员(成员变量、方法、构造器)抽象类都可以有。
●抽象类最主要的特点:抽象类不能创建对象(抽象的无法实例化),仅作为一种特殊的父类, 让子类继承并实现。
●一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。
●父类知道每个子类都要做某 个行为,但每个子类要做的情况不一-样,父类就定义成抽象方法,交给子类去重写实现,我们设计这样的抽象类,就是为了更好的支持多态。
需求
某宠物游戏,需要管理猫、狗的数据。
猫的数据有:名字;行为是:喵喵喵的叫~
狗的数据有:名字;行为是:汪汪汪的叫~
请用面向对象编程设计该程序。
模板方法设计模式的写法
●1、 定义一个抽象类。
●2、 在里面定义2个方法
. ➢一个是模板方法:把相同代码放里面去。
➢一个是抽象方法:具体实现交给子类完成。
多学一招:建议使用final关键字修饰模板方法,为什么?
●模板方法是给对象直接使用的,不能被子类重写。
●一旦子类重写了模板方法,模板方法就失效了。
六、接口(抽像类的进阶)
1.接口概述●Java提供了一个关键字interface, 用这个关键字我们可以定义出一个特殊的结构:接口。
public interface接口名{
//成员变量(常量)
//成员方法(抽象方法)
}
●注意: 接口不能创建对象;接口是用来被类实现(implements) 的,实现接口的类称为实现类。
修饰符class实现类implements接口1,接口2,接口3,...{
}
●一个类可以实现多个接口(接口可以理解成干爹),实现类实现多个接口,必须重写完全部接口的全部抽象
方法,否则实现类需要定义成抽象类。
●弥补了类单继承的不足,一个类同时可以实现多个接口。(多继承)
●让程序可以面向接口编程,这样程序员就可以灵活方便的切换各种业务实现。
增强了接口的能力,更便于项目的扩展和维护。后期增强功能不用所有的实现类都改。
5、接口的其他细节: 接口的多继承、使用接口的注意事项[了解]一个接口可以同时继承多个接口
public interface C extends B , A{
}
接口多继承的作用
●便于实现类去实现。
接口其他注意事项(了解)
1、一个接口继承多个接口,如果多个接口中存在方法签名冲突,则此时不支持多继承。
2、一个类实现多个接口,如果多个接口中存在方法签名冲突,则此时不支持多实现。
3、一个类继承了父类,又同时实现了接口,父类中和接口中有同名的默认方法,实现类会优先用父类的。
4、一个类实现了多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可。
七、内部类(简写代码的作用)
●是类中的五大成分之一 (成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,这个类就是内部类。
●场景:当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设计时,就可以把这个事物设计成内部类。
public class Car{
//内部类
public class Engine{
}
}
就是类中的-一个普通成员,类似前面我们学过的普通的成员变量、成员方法。
public class Outer {
//成员内部类
public class Inner {//可以直接访问外部类的实例成员、静态成员
//可以拿到当前外部类对象,格式是:外部类名.this。
}
}
注意: jDK16之前,成员内部类中不能定义静态成员,JDK 16开始也可以定义静态成员了
创建对象的格式:
外部类名.内部类名 对象名= new外部类(...).new内部类(...);
Outer. Inner in = new Outer() . new Inner();
有static修饰的内部类,属于外部类自己持有。
public class Outer{
// 静态内部类
public static class Inner{
}
}
创建对象的格式:
外部类名.内部类名对象名= new外部类.内部类(..);
Outer.Inner in= new Outer.Inner();
静态内部类中访问外部类成员的特点
●可以直接访问外部类的静态成员,不可以直接访问外部类的实例成员。
局部内部类是定义在在方法中、代码块中、构造器等执行体中。
04匿名内部类[重点]就是一种特殊的局部内部类;所谓匿名:指的是程序员不需要为这个类声明名字。
new类或接口(参数值..) {
类体(一般是方法重写);
};
特点:匿名内部类本质就是一个子类,并会立即创建出一个子类对象。
作用:用于更方便的创建一个子类对象。
使用场景
通常作为一一个参数传输给方法。
调用接口程序用,简化代码
//给按钮绑定单击事件监听器。
btn. addActionListener(new ActionListener() {
@override
pubLic void actionPerformed (ActionEvent e) {
}
});
八、枚举(列举几种类型)
枚举是一种特殊类。
枚举类的格式:
修饰符enum枚举类名{
名称1,名称2, ... ;
其他成员...
}
注意:
●枚举类中的第一-行, 只能写一-些合法的标识符(名称),多个名称用逗号隔开。
●这些名称,本质是常量,每个常量都会记住枚举类的一一个对象。
●枚举类的第一行只能罗列一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象。
●枚举类的构造 器都是私有的(写不写都只能是私有的) ,因此,枚举类对外不能创建对象。
●枚举都是最终类, 不可以被继承。
●枚举类中, 从第二行开始,可以定义类的其他各种成员。
●编译器为枚举类新增了几个方法,并且枚举类都是继承: java.lang.Enum类的, 从enum类也会继承到一些方法。
●用来表示一组信息,然后作为参数进行传输。
选择定义一个一个的常量来表示一组信息,并作为参数传输
●参数值不受约束。
选择定义枚举表示一组信息,并作为参数传输
●代码可读性好,参数值得到了约束,对使用者更友好,建议使用!
九、泛型(给定形参的数据类型)
●定义类、 接口、方法时,同时声明了一个或者多个类型变量(如: <E>) , 称为泛型类、泛型接口,泛型方法、它们统称为泛型。
● 作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!这样可以避免强制类型转换,及其可能出现的异常。
● 泛型的本质:把具体的数据类型作为参数传给类型变量E。
注意:类型变量建议用大写的英文字母,常用的有: E、T、K、V等
泛型方法、泛型通配符、上下限通配符
●就是“?”,可以在“使用泛型”的时候代表一切类型; E TK V是在定义泛型的时候使用。
泛型的上下限:
●泛型上限: ? extends Car: ?能接收的必须是Car或者其子类。
●泛型下限: ? super Car : ?能接收的必须是Car或者其父类。
泛型是工作在编译阶段的,一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除。
泛型不支持基本数据类型(int,double),只能支持对象类型(引用数据类型)。
相关知识
电子宠物游戏java
宠物游戏系统 java
用java写的小宠物游戏
Java基于Java宠物寄存管理系统(开题+源码)
Java基于Java宠物寄存管理系统(源码+mysql+文档)
Java基于ssm598基于VUE3+SSM框架的在线宠物商城
Java基于JAVA语言的宠物寄养管理(开题+源码)
毕业设计:基于java的宠物领养系统设计与实现
Java基于Java技术的宠物交易平台的设计与实现(开题+源码)
java宠物之家代码
网址: java基于控制台宠物养成 java游戏宠物 https://www.mcbbbk.com/newsview557506.html
上一篇: 电子宠物官方手游下载 |
下一篇: 最受期待宠物游戏推荐 |
推荐分享

- 1我的狗老公李淑敏33——如何 5096
- 2南京宠物粮食薄荷饼宠物食品包 4363
- 3家养水獭多少钱一只正常 3825
- 4豆柴犬为什么不建议养?可爱的 3668
- 5自制狗狗辅食:棉花面纱犬的美 3615
- 6狗交配为什么会锁住?从狗狗生 3601
- 7广州哪里卖宠物猫狗的选择性多 3535
- 8湖南隆飞尔动物药业有限公司宠 3477
- 9黄金蟒的价格 3396
- 10益和 MATCHWELL 狗 3352