Java基础之面向对象(二)
面向对象的三大特性:继承、封装、多态
1.封装的作用
->隐藏代码实现的细节
->使用简单,方便
->维持数据的安全性,维护程序的健壮性
`public class Book {
private String title;//书的名字
private int pageNum;//书的总页码
public Book() {
}
//封装,setter getter方法
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
if(pageNum<200) {
System.out.println("页数不能小于200页");
this.pageNum = 200;
}else {
this.pageNum = pageNum;
}
}
public void detail() {
System.out.println("教材名称:"+this.title+"\t"+"页数:"+this.pageNum+"页");
}
}`
public class Test {
public static void main(String[] args) {
Book book=new Book();
book.setTitle("西游记");
book.setPageNum(60);
book.detail();
}
}
2.构造方法
->名称必须与类名相同
->没有返回值
->构造方法可以重载
-> 构造方法是在对象初始化的时候被调用的
3.方法重载(overload)
(多个方法有相同的名字,不同的参数)
->方法名称必须相同,才能形成重载
->重载方法的参数组合不一样
->方法重载和返回值没有关系
->构造函数也是方法的重载
->方法重载是多态的一种表现形式
`public class Calculate {
/**
* 两个整数相加
* @param 第一个加数
* @param 第二个加数
/
public void add(int a,int b) {
System.out.println(“a+b”+"="+(a+b));
}
/*
* 两个字符相加,拼接起来
* @param 第一个字符
* @param 第二个字符
/
public void add(char a,char b) {
System.out.println(“a+b”+"="+a+b);
}
/*
* 两个字符串相加,拼接起来
* @param 第一个字符串
* @param 第二个字符串
/
public void add(String a,String b) {
System.out.println(“a+b”+"="+a+b);
}
/*
* 两个浮点数相加
* @param 第一个浮点数
* @param 第二个浮点数
*/
public void add(double a,double b) {
System.out.println(“a+b”+"="+(a+b));
}
}`
4.继承
- 使用extend关键实现继承
- 继承父类的属性和方法
- 继承只支持单一继承。一个子类只能继承一个父类
- 子类比父类拥有的功能更加丰富
- 子类中可以增加域、增加方法或覆盖子类的方法,但是不能删除继承的任何域和方法
- 父类转化成子类之前,应该使用instanceof进行检查
`public class Teacher {
private String name; // 讲师姓名
private String school; // 所在校区
/**- 构造函数
- @param name
- @param school
/
public Teacher(String name, String school) {
this.name = name;
this.school = school;
}
/* - 授课方法
/
public void giveLession(){
System.out.println(“知识点讲解”);
System.out.println(“总结提问”);
}
/* - 自我介绍
*/
public void introduction() {
System.out.println(“大家好!我是”+ school + “的” + name + “.”);
}
}
`public class DotNetTeacher extends Teacher{
/**
* 构造函数
* @param name
* @param school
* 注意:在子类的构造方法中调用父类的构造方法必须放在子类构造方法第一行
*/
public DotNetTeacher(String name, String school) {
super(name,school);
}
//重写父类的方法
public void giveLession() {
System.out.println("启动Visual Studio 2012");
super.giveLession();
}
}`
5.super关键字
- 调用父类的方法
- 调用父类的构造器,只能作为第一条语句在子类的构造器中出现
- 使用super调用父类的构造方法时只能写在子类的构造方法中
6.修饰符
(1)标记为public的部分可以被任意的类使用;标记为private的部分只能被定义它们的类使用。
(2)如果没有指定public或private,这个部分(类、方法或变量)可以被同一包中的所有方法访问。
(3)最好将类中的域标记为private,而方法标记为public
7.final修饰符
定义常量或者不需要更改的变量;确保每一个构造器执行之后,这个域的值被设置;并且在后面的操作中,不能够再对他进行重写
-
final关键字修饰的方法不可以被重写
-
final关键字修饰的类不可以被继承
-
final修饰成员变量,两种方式初始化:
->声明同时初始化
->构造函数中初始化 -
final关键字也可以修饰局部变量,使用之前初始化即可
8.方法的重写 -
父子类存在继承关系时产生方法的重写
方法重载和方法重写的区别