从入门到放弃的第二周(面向对象)......day.9.。。。。。继承,重写,绑定,final;

1,继承

 

使用extends实现继承
父类中哪些成员可以被子类继承?
public成员,protected成员
不能被继承:private修饰的,default修饰的,构造方法

 

 

2,方法重写(override) 覆盖

 


概念:子类中重新实现父类中的方法

  1. 方法名一样,
  2. 参数列表一样
  3. 子类方法的返回值类型应该与父类型一样或是其子类
  4. 子类方法的访问控制修饰符其可见访问不能减小,
  5. 子类方法声明抛出的异常不能比父类方法声明抛出的异常多

 

3,Object类

 

扫描二维码关注公众号,回复: 7014977 查看本文章


Object类是所有类的父类,有几个方法一般会被重写
toString():输出或记录日志时会使用到该方法返回的结果
equals():在业务逻辑上判断是否是一个对象时重写
hashCode();


补充

==与equals的区别
==:用于基本数据类型之间的比较,布尔类型不能与其他数值类别比较。比较是值
用于引用类型之间的比较,比较的是地址
equals: 只能使用引用类型调用,默认情况下与==一样,不过在实际开发中会重写该方法

 

课堂任务:
1,声明一个实体类Student,属性;name,age,no(学号),重写equals方法
2,声明一个学生的操作类,有一个方法:
从一个学生数组中,根据姓名和学号判断给定的学生是否存在
3,测试

 

 

public class Student {
           private String name;
           private int  age ;
           private int  no;
		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 int getNo() {
			return no;
		}
		public void setNo(int no) {
			this.no = no;
		}         
}

 

  

 

 

public class Studentmaker {
  
	 public boolean equals(Student a,Student b){
		
		 if(a.getName().equals(b.getName())){
			 if(a.getNo()==b.getNo()){
				 return true;
			 }else{return false;}		 
		 }		 
		 return false;
	 }
}

  

public class Sudenttest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		      Studentmaker studentmaker=new Studentmaker();
             Student s1=new Student();
             Student s2=new Student();
             s1.setName("suxiao");
             s1.setAge(21);
             s1.setNo(123);
             s2.setName("suxiao");
             s2.setAge(21);
             s2.setNo(123);
             System.out.print(studentmaker.equals(s1, s2));
	}

}

  


4,绑定


向上转型与向下转型
向上转型:从子类型向父类型转换,自动的
向下转型:从父类型向子类型转换,使用强制转换的语法 ()

 

静态(前期):在编译时能决定访问到谁的属性或方法 static,final修饰的成员或方法

动态(后期):在运行时才能决定访问到谁的属性或方法,非static

 


instanceof关键字


instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。
类的实例包含本身的实例,以及所有直接或间接子类的实例


instanceof左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树,否则会编译错误
使用该运算符的场景大部分情况是为了后续的向下转型,或称为保证类型安全

 

 

使用建议:
1,声明方法的时候,参数尽可能使用父类型
2,方法的返回值类型上,尽可能使用父类型

 

5,super
第一种用法:在普通方法(static方法除外)中调用父类中的属性或方法 super.
第二种用法:在子类的构造方法中,显式调用父类的构造方法 super()

 

 

6,类的初始化顺序

 


在子类构造方法调用时会首先调用父类的构造方法
执行的顺序:
父类静态代码块
子类静态代码块
父类代码块
父类的构造方法
子类的代码块
子类的构造方法
目的:了解初始化的顺序

 

 

7,final

 


使用场景及意义:
7.1 修饰变量,表示一个常量,一旦初始化就不可修改
方法中的局部变量:可以声明时赋初始值,可以在使用前赋值
类成员中的属性,可以声明时赋初始值,也可以在代码块或构造方法中赋值

如果是final修饰的引用类型变量,是不能重新赋值,但是其中的非final成员可以修改

final变量的命名一般是所有字母都大写,且使用下划线分隔
7.2 修饰方法,表示方法不能被子类重写
7.3 修饰类,表示该类不可被继承

 

 

定义一个汽车类Vehicle,要求如下:
(a)属性包括:汽车品牌brand(String类型)、颜色color(String类型)和速度speed(double类型)。
(b)至少提供一个有参的构造方法(要求品牌和颜色可以初始化为任意值,但速度的初始值必须为0)。
(c)为属性提供getter/setter方法。注意:汽车品牌一旦初始化之后不能修改。
(d)定义一个方法run(),用打印语句描述汽车奔跑的功能。
定义测试类VehicleTest,在其main方法中创建一个品牌为“benz”、颜色为“black”的汽车。

public class Car {
        
	private final  String brand;  
	private  String color;  
	private  double speed;  
	
	 public Car(String a,String b){
		 this.brand=a;
		 this.color=b;
		 this.speed=0;
	 }
	public String getBrand() {
		return brand;
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public double getSpeed() {
		return speed;
	}
	public void setSpeed(double speed) {
		this.speed = speed;
	}
}

  

public class Cartest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
           Car car=new Car("benz", "黑色");
           Run run=new Run();
           run.run(car);
	}
}

  

public class Run {
       
	 public void run(Car c){
		 System.out.println(c.getColor()+"的"+c.getBrand()+"以"+c.getSpeed()+"速度奔跑");
	 }
}

  

(2)定义一个Vehicle类的子类轿车类Car,要求如下:
(a)轿车有自己的属性载人数loader(int 类型)。
(b)提供该类初始化属性的构造方法。
(c)重新定义run(),用打印语句描述轿车奔跑的功能。
(d)定义测试类Test,在其main方法中创建一个品牌为“Honda”、颜色为“red”,载人数为2人的轿车

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/suxiao666/p/11342877.html
今日推荐