文章目录
练习:定义Student类,输入学生个数,输入信息并显示打印结果。
package cn.itxdl.day09;
public class Student {
private int id;
private String name;
private int age;
public Student() {
super(); //表示调用父类的无参构造方法,默认父类是Object类
}
public Student(int id, String name, int age) {
super();
setId(id);
setName(name);
setAge(age);
}
public int getId() {
return id;
}
public void setId(int id) {
if(id > 0)
this.id = id;
else
System.out.println("学号不合理!");// alt+/ 用于提示和补全代码
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age >= 4 && age <=60)
this.age = age;
else
System.out.println("年龄不合理!");
}
public void show(){
System.out.println("我是"+getName()+",今年"+getAge()+"岁了,我的学号是:"+getId());
}
}
package cn.itxdl.day09;
import java.util.Scanner;
public class TestStudent {
public static void main(String[] args) {
//1.提示用户输入班级的人数并使用变量记录、
System.out.println("请输入学生人数:");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
//2.准备一个长度为班级人数元素类型为Student类型的一维数组
Student[] arr = new Student[num];
//3.提示用户输入每个学生的信息并记录到一维数组中
for(int i = 0; i<arr.length;i++)
{
System.out.println("请输入第"+(i+1)+"个学生的信息(学号 姓名 年龄)");
arr[i] = new Student(sc.nextInt(),sc.next(),sc.nextInt());
}
System.out.println("---------");
//4.打印所有学生的信息
for(int i =0;i<arr.length;i++)
{
arr[i].show();
}
}
}
练习:定义Animal类,Dog类继承Animal类。
package cn.itxdl.day09;
public class Animal {
private String name;
private int age;
public Animal(){
super();
}
public Animal(String name,int age){
super();
setName(name);
setAge(age);
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age){
if(age > 0)
this.age=age;
else
System.out.println("年龄不合理!");
}
public int getAge(){
return age;
}
public void show()
{
System.out.println("名字:"+getName()+",年龄:"+getAge());
}
}
package cn.itxdl.day09;
public class Dog extends Animal {
private String color;
public Dog() {
super();//this()调用本类中的其他构造方法
}
public Dog(String name, int age,String color) {
super(name, age);
setColor(color);
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
package cn.itxdl.day09;
public class TestDog {
public static void main(String[] args) {
Dog d1 = new Dog("旺财",3,"黑色");
//当Dog类中没有show()方法时,则调用继承父类中的show()方法
d1.show();
}
}
今天内容:
- 继承
- 访问控制
- final关键字
- 对象创建的过程
- 多态
1.继承
1.1this关键字和super关键字的比较
(1)基本概念
this关键字:主要用于代表本类的对象;
super关键字:主要用于代表父类的对象;
(2)使用方式
使用this.的方式可以访问本类的成员变量和成员方法;
使用super.的方式可以访问父类的成员变量和成员方法;
使用this()的方式可以在构造方法的第一行可以调用本类中的其他构造方法;
使用super()的方式在构造方法的第一行可以调用父类的构造方法。
要求掌握的内容:
a.使用this.的方式可以区分同名的成员变量和形参变量;
b.使用super(实参)的方式可以调用父类中的构造方法;
c.使用super.的方式可以调用父类中被重写的方法;
1.2方法的重写(override)
(1)基本概念
从父类中继承下来得方法不足以满足子类的需求时,则需要在子类中重写一个与父类中一样的方法来覆盖从父类中继承下来的方法,叫做方法的重写。
(2)重写的原则
a.要求方法名相同、参数列表相同、返回值类型相同,从jdk1.5开始允许返回子类类型;
b.要求访问权限不能变小,可以相同或者变大;
c.要求不能抛出更大的异常(异常机制)。
package cn.itxdl.day09;
public class Animal {
private String name;
private int age;
public Animal(){
super();
}
public Animal(String name,int age){
super();
setName(name);
setAge(age);
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age){
if(age > 0)
this.age=age;
else
System.out.println("年龄不合理!");
}
public int getAge(){
return age;
}
public void show()
{
System.out.println("名字:"+getName()+",年龄:"+getAge());
}
}
package cn.itxdl.day09;
public class Dog extends Animal {
private String color;
public Dog() {
super();//this()调用本类中的其他构造方法
}
public Dog(String name, int age,String color) {
super(name, age);
setColor(color);
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
//标注、注解、告诉编译器下面的方法是对父类中方法的重写,若没有构成重写则编译器报错
@Override
public void show()//方法的重写-与父类的方法名一样
{ super.show();
System.out.println("毛色:"+getColor());
}
}
package cn.itxdl.day09;
public class TestDog {
public static void main(String[] args) {
Dog d1 = new Dog("旺财",3,"黑色");
//当Dog类中没有show()方法时,则调用继承父类中的show()方法
//当Dog类中有show()方法时,使用本身的show();
d1.show();
}
}
2.访问控制
2.1常见的访问控制符
访问控制符 | 访问权限 | 本类内部 | 本包中的其他类 | 子类内部 | 其他包其他类 |
---|---|---|---|---|---|
public | 公有的 | ok | ok | ok | ok |
protected | 保护的 | ok | ok | ok | no |
啥也不写 | 默认的 | ok | ok | no | no |
private | 私有的 | ok | no | no | no |
要求内容:
- public修饰的内容可以在任意位置使用;
- private修饰的内容只可以在本类内部使用;
- 通常情况下,成员变量都使用private修饰,成员方法都使用public修饰。
2.2包的定义
package 包名; --用于定义单层包;
package 包名1.包名2.包名3; ----用于定义多层包,也就是多层目录。
3.final关键字(重点)
3.1 基本概念
final本意为:最终的,不可更改的,该关键字可以修饰类、成员方法以及成员变量。
3.2使用方式
final关键字修饰类表示该类不能被继承;
-
为了防止滥用继承;如java.lang.String类、System类等。
final关键字修饰成员方法体现在该方法不能被重写。
-
为了防止不经意间造成的重写,如java.text.SimpleDateFormat类中的format方法等。
final关键字修饰成员变量表示必须指定初始值而且不能更改。
-
为了防止不经意间造成数据的改变,如java.lang.Thread类中MAX_PRIORITY等。
扩展:
在以后的开发中很少单独使用final关键字和static关键字修饰成员变量,通常都采用public static final 共同修饰来表达常量的概念,常量的命名规范是:所有字母大写,不同单词之间采用下划线链接。
如:
public static final double PI = 3.14;
alt+/ 补全代码
Ctrl + shift +/ 表示将选中内容进行多行注释
Ctrl+shift +\ 表示取消多行注释