标签:个数 手动 美国 问题 数据类型 tcl 私有方法 code 引用
public class OverrideTest {
public static void main(String[] args) {
Bird b = new Bird(); //创建鸟对象
b.move(); //让鸟儿移动
}
}
class Animal{ //父类
public void move(){ //移动
System.out.println("动物在移动!");
}
}
class Bird extends Animal{ //子类
}
以上程序存在问题:
move()
方法的时候,最好输出的结果是:“鸟儿在飞翔”move()
方法时输出的结果是:“动物在移动”Bird
子类从Animal
父类中继承过来的move()
已经无法满足业务的需求。子类继承父类时,有一些“行为”可能不需要改进,有一些“行为”可能面临着必须改进。因为父类中继承过来的方法已经无法满足子类的业务需求。
public class OverrideTest {
public static void main(String[] args) {
Bird b = new Bird();
b.move();
Cat C = new Cat();
C.move();
}
}
class Animal{
public void move(){
System.out.println("动物在移动!");
}
}
class Bird extends Animal{
//对move()方法进行方法覆盖、方法重写
//最好将父类中的方法原封不动的复制过来。(不建议手动编写)
public void move(){
System.out.println("鸟儿在飞翔!");
}
}
class Cat extends Animal{
public void move(){//方法重写
System.out.println("猫在走猫步!");
}
}
方法覆盖要和多态联合起来使用才有意义
Animal a = new Cat();
a.move();
move()
方法是Animal
的move()
方法上.静态方法存在方法覆盖吗?
方法覆盖只是针对“实例方法”,“静态方法覆盖”没有意义。
在方法覆盖中,关于方法的返回值类型。
经过测试,私有方法不能覆盖,记住就行
//私有方法不能覆盖
public class OverrideTest05 {
private void doSome(){//私有方法
System.out.println("Override‘s private method doSome execute!");
}
public static void main(String[] args) {
OverrideTest05 ot = new T();
ot.doSome();//Override‘s private method doSome execute!
}
}
class T extends OverrideTest05{
//尝试重写父类中doSome()方法
//访问权限不能更低,可以更高
public void doSome(){
System.out.println("T‘s public doSome method execute!");
}
}
public class OverrideTest03 {
public static void main(String[] args) {
ChinaPeople p1 = new ChinaPeople();//创建中国人对象
p1.setName("张三");
p1.speak();
AmericPeople p2 = new AmericPeople();//创建美国人对象
p2.setName("Jack");
p2.speak();
}
}
class People {
private String name;
public People() {
}
public People(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void speak() {
System.out.println(name + "正在说话!");
}
}
class ChinaPeople extends People {//中国人
//中国人说汉语
//所以子类需要对父类的speak()方法进行重写
public void speak() {
System.out.println(this.getName() + "正在说汉语!");
}
}
class AmericPeople extends People {//美国人
//美国人说汉语
//所以子类需要对父类的speak()方法进行重写
public void speak() {
System.out.println(this.getName() + " speak English!");
}
}
0bject
类中的toString()
方法toString()
方法的作用是什么?Java
对象”转换成“字符串的形式”。Object
类中toString()
方法的默认实现是什么?public String toString(){
return getClass().getName() + "@" +Interger.toHexString(hashCode());
}
toString
:方法名的意思是转换成String
。含义:调用一个java
对象的toString()
方法就可以将该java
对象转换成字符串的表示。
toString()
方法存在的作用就是:将java
对象转换成字符串形式。
大多数的java
类toString()
方法都是需要覆盖的。因为Object
类中提供的toString()
方法输出的是一个java
对象的内存地址。
至于toString()
方法具体怎么进行覆盖?
toString()
方法给的默认实现够用吗?public class OverrideTest04 {
public static void main(String[] args) {
MyDate t1 = new MyDate();//创建一个日期对象
//调用toString()方法(将对象转换成字符串形式)
//对这个输出结果不满意!希望输出:xxxx年xx月xx日
//重写MyDate的toString()方法之前的结果
//System.out.println(t1.toString());//MyDate@75412c2f
//重写MyDate的toString()方法之前的结果
System.out.println(t1.toString());//1970年1月1日
//当直接输出一个“引用”的时候,println()方法会先自动调用"引用.toString()",
// 然后输出toString()方法的执行结果。
System.out.println(t1);//1970年1月1日
}
}
class MyDate {
private int year;
private int month;
private int day;
public MyDate() {
this(1970, 1, 1);
}
public MyDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
//从Object类中继承过来的那个toString()方法已经无法满足业务需求了
//在子类MyDate中有必要对父类的toString()方法进行覆盖/重写
//现在的业务要求是:调用toString()方法进行字符串转换的时候,
//希望转换的结果是:xxxx年xx月xx日,这种格式。
//重写一定要复制粘贴,不要手动编写,会错的
public String toString() {
return year + "年" + month + "月" + day + "日";
}
}
标签:个数 手动 美国 问题 数据类型 tcl 私有方法 code 引用
原文地址:https://www.cnblogs.com/yxc-160206/p/13212053.html