返回列表 发新帖

【Android入坑系列教程】43.类的继承(二)---面向对象

[复制链接]

62

主题

722

回帖

2756

积分

大学生

Rank: 5Rank: 5

金币
2029
好评
12
信誉
100

考神

发表于 2019-4-1 11:56:03 | 显示全部楼层 | 阅读模式  来自 四川
本帖最后由 pansong291 于 2019-4-2 12:16 编辑

上篇:42.类的继承(一)---面向对象
下篇:44.抽象类与接口---面向对象

注意:如果你的回复只是“感谢分享”、“辛苦了”之类的与教程内容无关的字眼,还请不要回复本帖,谢谢合作!!!
注意:如果你的回复只是“感谢分享”、“辛苦了”之类的与教程内容无关的字眼,还请不要回复本帖,谢谢合作!!!
注意:如果你的回复只是“感谢分享”、“辛苦了”之类的与教程内容无关的字眼,还请不要回复本帖,谢谢合作!!!


覆盖父类的方法
在子类中可以根据需要对从父类中继承来的方法进行改造----方法的覆盖(也叫重写)。
覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型。
例如前面那个 Student 程序,它继承了 Person 类的 getInfo 方法,这个继承到的方法
只能打印出学生的 name 和 age,不能打印出学生专有的信息,比如学校的名称等,这时我
们就应该在类 Student 中重新编写一个 getInfo 方法,这就是方法的覆盖。程序修改后如下:
程序清单:Student1.java
class Person
{
    public String name;
    public int age;
    public void getInfo()
    {
        System.out.println(name);
        System.out.println(age);
    }
}
class Student extends Person
{
    String school=new String();
    public void study()
    {
        System.out.println("Studding");
    }
    public void getInfo()
    {
        super.getInfo();
        System.out.println(school);
    }
    public static void main(String[] args)
    {
        Person p=new Person();
        p.name="person";
        p.age=30;
        p.getInfo();
        Student s=new Student();
        s.name="student";
        s.age=16;
        s.school="清华大学";
        s.getInfo();
        s.study();
    }
}
运行结果:
person
30
student student student student
16
清华大学
Studding

从以上运行结果可以看出,p.getInfo()这一句中所用到的方法是父类 Person 的,而
s.getInfo()这一句用的方法却是子类 Student 的。如果在子类中想调用父类中的那个被覆
盖的方法,我们可以用 super.方法的格式,如程序中的 super.getInfo();
注意:覆盖方法时,不能使用比父类中被覆盖的方法更严格的访问权限,如:父类中的
方法是 public 的,子类的方法就不能是 private 的。关于访问权限中更多的知识,我们将
在本章结尾时详细讲解,在这里大家只要有个印象就行了。

final 关键字
在 Java 中声明类、属性和方法时,可使用关键字 final 来修饰。
final 标记的类不能被继承。
final 标记的方法不能被子类重写。
final 标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。
如:
final int X=3;
X=4; //出错
final 标记的成员变量必须在声明的同时或在该类的构造方法中显式赋值,然后才能使
用。
class Test
{
    final int X=3;
}
或者:
class Test
{
    final int X;
    Test()
    {
        X=3;
    }
}
✔ 方法中定义的内置类只能访问该方法内的 final 类型的局部变量,用 final 定义的局
部变量相当于是一个常量,它的生命周期超出方法运行的生命周期,这种情况的应用,
我们已在第三章中讲过。将一个形参定义成 final 也是可以的,这就限定了我们在方
法中修改形式参数的值。
多学两招:
我们已经知道 final 标记的变量(成员变量或局部变量)即成为常量,只能赋值一次,
但这个“常量”也只能在这个类的内部使用,不能在类的外部直接使用。
当我们用 public static final 共同标记常量时,这个常量就成了全局的常量。而且
这样定义的常量只能在定义时赋值,即使在构造函数里面也不能对其进行赋值。如:
class Xxx
{
    public static final int X=3;
    ......
}
在 Java 中,我们看到的常量的定义方法,总是用 public static final 的组合方式进
行标识。Java 中的全局常量也放在一个类中定义,给我们的使用带来了很大的方便,譬如,
我们在程序中想使用最大的浮点小数,我们知道有个 Float 类封装了浮点小数的操作,我们
就很容易想到在 Float 类的文档帮助中去查找这个常量的具体英文拼写。

上篇:42.类的继承(一)---面向对象
下篇:44.抽象类与接口---面向对象
回复

使用道具 举报

46

主题

2373

回帖

5796

积分

硕士生

Rank: 6Rank: 6

金币
1479
好评
5
信誉
101
发表于 2019-4-1 12:08:03 来自手机  | 显示全部楼层  来自 甘肃
有没有c++教程
回复

使用道具 举报

10

主题

510

回帖

1725

积分

高中生

Rank: 4

金币
544
好评
2
信誉
101
发表于 2019-10-9 18:45:35 | 显示全部楼层  来自 重庆
为什么我在其他地方看到的说,返回值类型不一定要相同?
回复

使用道具 举报

1

主题

296

回帖

806

积分

高中生

Rank: 4

金币
229
好评
0
信誉
100
发表于 2019-10-9 22:46:23 | 显示全部楼层  来自 安徽
安卓教程
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表