Day06
一、需求
-创建一个猫类和一个狗类,分别创建一个对象
class Cat {
String name;
int age;
public Cat() {
}
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println("吃骨头");
}
public void action() {
System.out.println("抓老鼠");
}
}
class Dog {
String name;
int age;
public Dog() {
}
public Dog(String name,int age) {
this.name=name;
this.age = age;
}
public void eat() {
System.out.println("吃猫头");
}
public void action() {
System.out.println("抓猫");
}
}
二、继承
1、继承的语法
-如果想要一个类去继承另外一个类 ,只需要使用extends关键字即可
-如果一个类没有使用extends关键字,那么这个类会默认继承 object类
-object类是所有类的直接或间接父类
备注:java中支持类的单继承,其中父类可以有多个子类,但是子类只能有一个父类,子类可以继承父类的成员变量和成员方法,但构造方法不能继承。
2、继承的用处
-继承可以将重复的代码统一编写,减少代码的冗余
-可以使用面向父类通用,让我们的程序更加通用
实例:
package javaSEDay09;
public class Animal {
String name;
int age;
public Animal() {
super();
}
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public static void eat() {
System.out.println("吔屎啦你");
}
}
这个是父类,然后用子类去继承父类
package javaSEDay09;
public class Action extends Animal{
public Action() {
super();
}
public Action(String name, int age) {
super(name, age);
}
public static void main(String[] args) {
Animal cat=new Animal();
eat();
}
}
三、方法的重写(方法的覆盖)
-当我们的子类继承一个父类 ,父类提供的方法不适合我们使用,我们可以重写的方式来覆盖父类原有的方法
-语法:
1-方法的重写只会发生在父子类的关系。
2-类在执行方法的时候,肯定会执行重写后的方法
3-重写后的方法参数要与重写前的方法参数保持一致
-返回值的基本类型
-基本数据类型
-子类要和父类的返回值类型保持一致
-引用数据类型
-子类的返回值类型不能大于父类的返回值类型
四、父类的引用指向子类的对象(向上造型)
在实际开发中,为了程序比较通用,我们一般会面向父类进行编程。
比如代码可以这么写:
Dog dog=new Dog();
Animal dog=new Dog();
实例
父类:
package com.auto.jintian;
public class Car {
public int pealAuto=2;
public int pealHand=3;
public void stepOnGas() {
System.out.println("油门踏板");
}
public void stepOffGas() {
System.out.println("刹车踏板");
}
}
子类重写父类:
package com.auto.jintian;
public class autoCar extends Car {
public void stepOnGas() {
System.out.println("右脚油门踏板");//重写父类的方法
}
public void stepOffGas() {
System.out.println("左脚刹车踏板");
}
}
五、java程序的编译期和运行期
在我们使用向上造型的时候,java程序就存在编译期和运行期:(编译期看类型,运行期看对象)
六、类型的强转
不管是基本数据类型还是引用数据类型,强转都会存在风险,尽量避免,如果实在无法避免,最好在强转的时候加上一个判断,这就需要使用instanceof关键字。使用instanceof关键字的表达式返回值为布尔值。如果返回值为true。说明对象引用是类的实例,如果是false则引用对象不是类的实例,具体格式如下:
myobject(某个类的对象引用) instanceof(关键字) exampleClass(某个类)
实例:
父类:
package javaSEDay11;
public class Person01 {
String name;
int age;
public void civilService() {
System.out.println("公务员处理日常事物");
}
}
子类:
package javaSEDay11;
public class Person02 extends Person01 {
public void civilService() {
super.civilService();
System.out.println("总统处理国家大事,纵览全局");
}
}
测试:
package javaSEDay11;
public class textPerson extends Person02 {
public static void main(String[] args) {
Person02 person = new Person02();
person.name="总统";
person.age=55;
if(person instanceof Person01 ) {
person.civilService();
}
}
}
七、super
super可以再本类中调用其父类和构造器,
- super(参数)根据参数的个数和类型调用父类相应的构造器
- super.方法名 根据方法名调用父类的方法。
-子类的构造器的第一行默认会有一个super();
-this和super在调用构造器的时候不能共存。