Java进阶总结4

Java进阶总结4

1.继承

1.1继承的定义

/**

 * 子类继承父类

 * 可以继承父类公共属性和方法 如果是私有的不能继承

 * 继承需要关键字 extends

 * java只支持单继承(只有一个亲父亲)

 * 子类可以拥有自己的特性

 * */

1.2super

/**

 * 子类

 * super 可以访问父类的属性和方法

 * super 只能存在在子类的方法中

 * super 可以存在子类的构造方法中 用来调用父类的构造方法 必须放在构造方法的第一行Super();

 * */

 

package day09;

/*

 * 父类

 * 存放子类公共的属性

 * */

 

public class Person {

//公共属性

String name;

int age;

private int tel;//电话

protected String address;

public  Person() {

System.out.println("父类默认构造方法");

}

public  Person(String name) {

this();

System.out.println("父类中带参数的构造方法");

}

//方法

public void sleep() {

System.out.println(name+"\t\t"+age+"\t\t睡觉");

}

}

package day09;

public class Employee extends Person{

//属性

String hirDete;//入职时间

//子类中定义和父类相同的属性和方法

String name;

public void sleep() {

System.out.println("不能睡了");

}

//子类的构造方法

/**

 * 初始化一个对象的时候 ,构造方法必须调用一次

 * 1.如果子类的构造方法没有显示调用父类的构造方法,会默认执行默认的构造方法

 * 2.如果显示(super)调用父类指定的构造方法,父类指定的构造方法会被执行一次

 * */

public  Employee() {

//显示调用父类构造方法

//super();//指定调用默认的构造方法

super("尊");//指定调用带参数的构造方法

System.out.println("子类默认的构造方法");

}

public  Employee(String name) {

System.out.println("子类有参构造方法");

}

//行为

public void method1() {

//不使用super可以访问父类的成员

//子类和父类没有相同的属性和方法

System.out.println("name=="+this.name);//调用当前类

System.out.println("super name=="+super.name);//调用父类

super.sleep();

this.sleep();

}

}

 

package day09;

 

public class Student extends Person{

//属性

String sid;//学号

}

 

package day09;

/**

 * 子类

 * */

public class Teacher extends Person{

//属性

int level;//级别

}

 

package day09;

//测试类

public class TestDemo {

 

public static void main(String[] args) {

// TODO 自动生成的方法存根

//初始化一个Student对象 给对象赋值

Student stu=new Student();

stu.sid="001";

stu.name="熊大";

stu.age=22;

//stu.tel=112233;//父类的私有成员不能被访问

stu.sleep();

    System.out.println(stu.sid);

//初始化一个Teacher对象 给对象赋值

    Teacher tea=new Teacher();

    tea.name="熊二";

    tea.age=21;

    tea.level=3;

    tea.sleep();

    System.out.println(tea.level);

  //初始化一个Employeer对象 给对象赋值

    Employee em=new Employee();

    em.name="熊三";

    em.age=19;

    em.hirDete="2018";

    em.sleep();

    em.method1();

    System.out.println(em.hirDete);

}

}

输出结果:

1.3测试继承范围

package day09.qy;

 

import day09.Person;

 

/**

 * 继承不同包的父类

 * */

public class Worker extends Person{

public void dowork() {

//子类是否可以访问父类的private 、default(默认成员)、protected 、public

//this.tel=21;//私有成员不可直接访问

//this.name="尊";//默认成员在不同包中也不可访问

this.address="中国";//protected 修饰的成员可以在不同包的子类中访问

}

}

 

package day09.qy;

 

public class TestDemo {

 

public static void main(String[] args) {

// TODO 自动生成的方法存根

//初始化worker对象

Worker worker=new Worker();

//设置子类属性

//worker.name="尊";//使用的是默认权限修饰符,不能访问到

//worker.address="中国";//可以在不同包的子类中使用

}

 

}

输出结果:

1.4继承的练习题

package day09.Test1;

 

public class Animal {

private String name;//名字

private int age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

//行为

public void doEat() {

System.out.println("吃东西");

}

//构造方法

public Animal() {

// TODO 自动生成的构造函数存根

System.out.println("父类默认构造方法");

}

public  Animal(String name,int age) {

System.out.println("父类带参数构造方法");

//给父类属性赋值

this.name=name;

this.age=age;

}

}

package day09.Test1;

 

public class Cat extends Animal{

//设置子类特有属性

private String sex;

 

public String getSex() {

return sex;

}

 

public void setSex(String sex) {

this.sex = sex;

}

//特有行为

public void upperTree() {

System.out.println("猫可以上树");

}

public Cat() {

// TODO 自动生成的构造函数存根

System.out.println("猫的默认构造方法");

}

public  Cat(String name,int age) {

//调用父类带参数的构造方法  直接给父类属性赋值

super(name,age);

}

}

package day09.Test1;

 

public class Dog extends Animal{

//属性

private int weight;

 

public int getWeight() {

return weight;

}

public void setWeight(int weight) {

this.weight = weight;

}

//行为

public void swimming() {

System.out.println("狗会游泳");

}

public Dog() {

// TODO 自动生成的构造函数存根

}

public  Dog(String name,int age) {

super(name,age);

}

}

package day09.Test1;

 

public class TestDemo {

 

public static void main(String[] args) {

// TODO 自动生成的方法存根

//初始化cat对象

Cat cat=new Cat("Tom",2);

//设置sex

cat.setSex("公");

//获取name和age属性

System.out.println(cat.getName());//子类没有找父类

System.out.println(cat.getAge());

System.out.println(cat.getSex());

//调用公共方法

cat.doEat();

//初始化dog对象

Dog dog=new Dog("ww", 4);

dog.setWeight(20);

System.out.println(dog.getName());

System.out.println(dog.getAge());

System.out.println(dog.getWeight());

dog.doEat();

dog.swimming();

}

 

}

输出结果:

1.5重写

/**

 * 重写 只能是方法 只能重写父类的方法

 * 当父类的功能满足不了子类特性, 子类需要对父类的方法重新定义

 * 1.必须在子类中重写

 * 2.方法名 参数列表必须一致

 * 3.修饰符要嘛和父类一致,要嘛比父类修饰符权限大

 * 4.子类方法的返回值类型是和父类方法的返回类型相同或者是其子类。

 * 5.方法中声明的异常要么一致  要么获取子类类型

 * */

package day09.Test2;

 

public class Animal {

private String name;//名字

private int age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

//行为

public void doEat() {

System.out.println("吃东西");

}

//构造方法

public Animal() {

// TODO 自动生成的构造函数存根

System.out.println("父类默认构造方法");

}

public  Animal(String name,int age) {

System.out.println("父类带参数构造方法");

//给父类属性赋值

this.name=name;

this.age=age;

}

}

package day09.Test2;

 

public class Cat extends Animal{

//设置子类特有属性

private String sex;

 

public String getSex() {

return sex;

}

 

public void setSex(String sex) {

this.sex = sex;

}

//特有行为

public void upperTree() {

System.out.println("猫可以上树");

}

public Cat() {

// TODO 自动生成的构造函数存根

System.out.println("猫的默认构造方法");

}

public  Cat(String name,int age) {

//调用父类带参数的构造方法  直接给父类属性赋值

super(name,age);

}

@Override //注解

public void doEat() {//重写父类方法

// TODO 自动生成的方法存根

//super.doEat();//调用父类的方法

System.out.println("猫吃鱼,喵喵喵");

}

}

package day09.Test2;

 

public class Dog extends Animal{

//属性

private int weight;

 

public int getWeight() {

return weight;

}

public void setWeight(int weight) {

this.weight = weight;

}

//行为

public void swimming() {

System.out.println("狗会游泳");

}

public Dog() {

// TODO 自动生成的构造函

}

public  Dog(String name,int age) {

super(name,age);

}

@Override

public void doEat() {

// TODO 自动生成的方法存根

System.out.println("狗喜欢吃肉,汪汪汪");

//如果保留父类行为  可以使用super调用父类方法

super.doEat();

}

}

package day09.Test2;

 

public class TestDemo {

 

public static void main(String[] args) {

// TODO 自动生成的方法存根

//初始化cat对象

Cat cat=new Cat("Tom",2);

//设置sex

cat.setSex("公");

cat.doEat();

cat.upperTree();

//初始化dog对象

Dog dog=new Dog("ww", 4);

dog.setWeight(20);

dog.doEat();

dog.swimming();

}

 

}

输出结果:

1.6object类

方法

说明

toString()

返回当前对象本身的有关信息,按字符串对象返回

equals()

比较两个对象是否是同一个对象,是则返回true

hashCode()

返回该对象的哈希代码值

getClass()

获取当前对象所属的类信息,返回Class对象

 

package day09.Test3;

 

public class Student {

//属性

String name;

int age;

//重写toString

@Override

public String toString() {

// TODO 自动生成的方法存根

return name+"  "+age;

}

public static void main(String[] args) {

// TODO 自动生成的方法存根

//初始化student对象

Student stu=new Student();

Student stu1=stu;

System.out.println("stu=="+stu+"\nstu1=="+stu1);

//判断两个对象是否相等  恒等== 内存引用

if (stu.equals(stu1)) {

System.out.println("相等");

}else {

System.out.println("不相等");

}

//String 类型判断的是内容 其他类引用地址

String str=new String("123");

String str1=new String("1234");

if (str.equals(str1)) {

System.out.println("内容相等");

}else {

System.out.println("内容不相等");

}

stu.name="尊";

stu.age=21;

String msg=stu.toString();

System.out.println(msg);

}

 

}

输出结果:

1.7重写练习题

重写比较规则,判断两名学员(Student)是否为同一对象

Student相关属性:Id(学号)、name(姓名)、age(年龄)

如果两名学员的学号以及姓名相同,则为同一对象

package day09.Test4;

 

public class Student {

//设置属性

private int id;

private String name;

private int age;

 

public int getId() {

return id;

}

 

public void setId(int id) {

this.id = id;

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

public int getAge() {

return age;

}

 

public void setAge(int age) {

this.age = age;

}

@Override

public boolean equals(Object obj) {

Student stu=(Student)obj;

//instanceof用于判断一个引用类型所引用的对象是否是一个类的实例

if (stu instanceof Student) {

if(this.age==stu.getAge()&&this.name==stu.getName()&&this.id==stu.getId()){

return true;

}

}

return false;

}

public static void main(String[] args) {

// TODO 自动生成的方法存根

Student stu1=new Student();

stu1.setId(1);

stu1.setName("尊");

stu1.setAge(21);

Student stu2=new Student();

stu2.setId(11);

stu2.setName("尊");

stu2.setAge(21);

if (stu1.equals(stu2)) {

System.out.println("是同一个人");

}else {

System.out.println("不是同一个人");

}

}

 

}

输出结果:

2.知识框架

 

 

猜你喜欢

转载自blog.csdn.net/qq_41534115/article/details/81270537