封装 把类看成一个整体来对待,保证安全,信息的隐藏,便于修改,增强代码的可维护性
将所有的属性私有化(用private来)
为每一个属性提供public的get和set方法
在set方法里面为属性设置过滤条件
继承
一个子类只有一个父类,一个父类可以有多个子类
public class 子类名 extends 父类名{
}
子类会继承父类所有的属性和成员方法。但不会继承构造方法
java中所有的类都是object类的直接或间接的子类
相同变量就近原则
super关键字用在构造方法中时,必须一super([参数]);的方式使用
super([参数]),必须卸载构造方法的第一行
作用是现实的调用父类的构造方法
super 不会调用父类的构造方法
多态 相同代码执行不同方法
方法重载:在一个类中,有两个名字相同,参数不同的方法;
方法重写:在子类中,把父类的方法重新修改这个方法。
子类的对象在调用被重写的方法时,将会调用的是子类的方法
如果要调用父类的方法时,用super.+方法名();
重写时,子类的方法定义格式必须与父类的方法一致,
否则就是在子类中重载了父类的方法。
对象的多态性:(上转型和下转型)
上转型:将子类创建的对象,直接赋值给父类类型的变量,可以直接进行,这时父类的对象被叫做上转型对象
只能调用父类中的方法,子类中单独定义的方法不能调用
如果子类重新了父类的方法,会调用子类的重写后的方法
下转型:父类创建的对象不可以随意强制转化为子类的变量
P p1 = new P();C c1=(C) p1;//不可以
P p2 = new C();C c1=(C) p2;//可以
final修饰的类不能有子类(被final修饰的类叫做最终类)
final修饰的方法不能被子类重写
final修饰的属性(变量)为常量。一旦初始化后,不能被赋值。常量用大写字母表示
static
被static修饰的变量是静态变量,
静态变量直属于类,与对象无关
静态变量的调用:通过类名.静态变量名 对象名.静态变量名
无论在类中创建多少个类的对象,类的静态变量只有一份,并且在所有对象中共享
被static所修饰的方法是类的静态方法,和对象无关
静态方法的调用:通过类名.静态方法名 对象名.静态方法名
使用静态方法时
静态方法中只能直接调用静态方法
静态方法中只能直接使用静态变量
在普通方法中可以调用静态方法和静态变量
不能使用this关键字
main方法也是静态方法
main方法中可以直接调用静态方法
要想调用非静态方法,首先要创建对象,通过对象.方法名()方式来调用
静态块和非静态块
静态块是对静态变量初始化
静态块在非静态块之前执行
静态块只会执行一次
静态块的执行与对象的创建无关
静态块会在类第一次使用时执行,但如果仅仅作为变量的数据类型使用静态块也不会执行
非静态块会在创建对象时执行,每创建一个对象,非静态块执行一次
在子类中调用时,父类的静态块和非静态块也会执行,并且在子类的前面
块与构造方法的执行顺序
父类的静态块->子类的静态块->父类的非静态块->父类的构造方法->子类的非静态块->子类的构造方法
例如 封装
public class Student {
/*
* 封装
* 1. 将所有的属性使用private关键字私有化,
* 2. 为每个一属性提供public的get和set方法
*/
private String name;
private char sex;
private int age;
private int no;
private int java;//用来放java的成绩
double Max,Min;
public Student() {
}
public Student(String name, char sex, int age, int no, int java) {
super();
this.name = name;
this.sex = sex;
this.age = age;
this.no = no;
this.java = java;
}
// 快速添加 get set方法
// 在类中 右键-> source -> generate Getters and Setters ...
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public int getJava() {
return java;
}
public void setJava(int java) {
this.java = java;
}
public String getName() {
return name;
}
public void setName(String name) {
if(name==" "){
System.out.print("错误的name值");
}else{
this.name = name;}
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
if(sex!='男'&&sex!='女'){
System.out.print("sex错误请输入男或女");
}else {
this.sex = sex;
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age<0&&age>130){
System.out.print("age输入错误");
}
this.age = age;
}
public void show(){
System.out.println("姓名 性别 年龄 学号 java成绩");
System.out.println(name+" "+sex+" "+age+" "+no+" "+java );
}
double MaxJava(double a, double a1, double a2, double a3, double a4) {
Max = (a > a1 ? a : a1);
Max = a2 > Max ? a2 : Max;
Max = a3 > Max ? a3 : Max;
Max = a4 > Max ? a4 : Max;
return Max;
}
double MinJava(double a, double a1, double a2, double a3, double a4) {
Min = (a > a1 ? a1 : a);
Min = a2 > Min ? Min : a2;
Min = a3 > Min ? Min : a3;
Min = a4 > Min ? Min : a4;
return Min;
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
// Student student = new Student();
// student.setName("小明");
// System.out.println(student.getName());
// student.setSex('男');
// System.out.println(student.getSex());
// student.setAge(20);
// System.out.println(student.getAge());
Student student = new Student("小明", '男', 19, 1, 90);
Student student1 = new Student("小刚", '男', 19, 2, 88);
Student student2 = new Student("小红", '女', 18, 3, 100);
Student student3 = new Student("小华", '女', 19, 4, 90);
Student student4 = new Student("小强", '男', 20, 5, 85);
student.show();
student1.show();
student2.show();
student3.show();
student4.show();
System.out.println("平均成绩:" + (student.getJava() + student1.getJava() + student2.getJava() + student3.getJava()
+ student4.getJava()) / 5);
// int max = student.getJava(), min = student.getJava();
// //比较student1和student的大小
// if(max<student1.getJava()){
// max=student1.getJava();
// }else if(min>student1.getJava()){
// min=student1.getJava();
// }
// //比较student1和student2的大小
// if(max<student2.getJava()){
// max=student2.getJava();
// }else if(min>student2.getJava()){
// min=student2.getJava();
// }
// //比较student3和student2的大小
// if(max<student3.getJava()){
// max=student3.getJava();
// }else if(min>student3.getJava()){
// min=student3.getJava();
// }
// //比较student3和student4的大小
// if(max<student4.getJava()){
// max=student4.getJava();
// }else if(min>student4.getJava()){
// min=student4.getJava();
// }
//
// System.out.println("最高成绩"+max + "最低成绩" + min);
double a=student.getJava();
double a1=student1.getJava();
double a2=student2.getJava();
double a3=student3.getJava();
double a4=student4.getJava();
System.out.println("最高成绩"+student.MaxJava(a, a1, a2, a3, a4));
System.out.println("最低成绩"+student.MinJava(a, a1, a2, a3, a4));
}
}
例如 继承
将所有的属性私有化(用private来)
为每一个属性提供public的get和set方法
在set方法里面为属性设置过滤条件
继承
一个子类只有一个父类,一个父类可以有多个子类
public class 子类名 extends 父类名{
}
子类会继承父类所有的属性和成员方法。但不会继承构造方法
java中所有的类都是object类的直接或间接的子类
相同变量就近原则
super关键字用在构造方法中时,必须一super([参数]);的方式使用
super([参数]),必须卸载构造方法的第一行
作用是现实的调用父类的构造方法
super 不会调用父类的构造方法
多态 相同代码执行不同方法
方法重载:在一个类中,有两个名字相同,参数不同的方法;
方法重写:在子类中,把父类的方法重新修改这个方法。
子类的对象在调用被重写的方法时,将会调用的是子类的方法
如果要调用父类的方法时,用super.+方法名();
重写时,子类的方法定义格式必须与父类的方法一致,
否则就是在子类中重载了父类的方法。
对象的多态性:(上转型和下转型)
上转型:将子类创建的对象,直接赋值给父类类型的变量,可以直接进行,这时父类的对象被叫做上转型对象
只能调用父类中的方法,子类中单独定义的方法不能调用
如果子类重新了父类的方法,会调用子类的重写后的方法
下转型:父类创建的对象不可以随意强制转化为子类的变量
P p1 = new P();C c1=(C) p1;//不可以
P p2 = new C();C c1=(C) p2;//可以
final修饰的类不能有子类(被final修饰的类叫做最终类)
final修饰的方法不能被子类重写
final修饰的属性(变量)为常量。一旦初始化后,不能被赋值。常量用大写字母表示
static
被static修饰的变量是静态变量,
静态变量直属于类,与对象无关
静态变量的调用:通过类名.静态变量名 对象名.静态变量名
无论在类中创建多少个类的对象,类的静态变量只有一份,并且在所有对象中共享
被static所修饰的方法是类的静态方法,和对象无关
静态方法的调用:通过类名.静态方法名 对象名.静态方法名
使用静态方法时
静态方法中只能直接调用静态方法
静态方法中只能直接使用静态变量
在普通方法中可以调用静态方法和静态变量
不能使用this关键字
main方法也是静态方法
main方法中可以直接调用静态方法
要想调用非静态方法,首先要创建对象,通过对象.方法名()方式来调用
静态块和非静态块
静态块是对静态变量初始化
静态块在非静态块之前执行
静态块只会执行一次
静态块的执行与对象的创建无关
静态块会在类第一次使用时执行,但如果仅仅作为变量的数据类型使用静态块也不会执行
非静态块会在创建对象时执行,每创建一个对象,非静态块执行一次
在子类中调用时,父类的静态块和非静态块也会执行,并且在子类的前面
块与构造方法的执行顺序
父类的静态块->子类的静态块->父类的非静态块->父类的构造方法->子类的非静态块->子类的构造方法
例如 封装
public class Student {
/*
* 封装
* 1. 将所有的属性使用private关键字私有化,
* 2. 为每个一属性提供public的get和set方法
*/
private String name;
private char sex;
private int age;
private int no;
private int java;//用来放java的成绩
double Max,Min;
public Student() {
}
public Student(String name, char sex, int age, int no, int java) {
super();
this.name = name;
this.sex = sex;
this.age = age;
this.no = no;
this.java = java;
}
// 快速添加 get set方法
// 在类中 右键-> source -> generate Getters and Setters ...
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public int getJava() {
return java;
}
public void setJava(int java) {
this.java = java;
}
public String getName() {
return name;
}
public void setName(String name) {
if(name==" "){
System.out.print("错误的name值");
}else{
this.name = name;}
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
if(sex!='男'&&sex!='女'){
System.out.print("sex错误请输入男或女");
}else {
this.sex = sex;
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age<0&&age>130){
System.out.print("age输入错误");
}
this.age = age;
}
public void show(){
System.out.println("姓名 性别 年龄 学号 java成绩");
System.out.println(name+" "+sex+" "+age+" "+no+" "+java );
}
double MaxJava(double a, double a1, double a2, double a3, double a4) {
Max = (a > a1 ? a : a1);
Max = a2 > Max ? a2 : Max;
Max = a3 > Max ? a3 : Max;
Max = a4 > Max ? a4 : Max;
return Max;
}
double MinJava(double a, double a1, double a2, double a3, double a4) {
Min = (a > a1 ? a1 : a);
Min = a2 > Min ? Min : a2;
Min = a3 > Min ? Min : a3;
Min = a4 > Min ? Min : a4;
return Min;
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
// Student student = new Student();
// student.setName("小明");
// System.out.println(student.getName());
// student.setSex('男');
// System.out.println(student.getSex());
// student.setAge(20);
// System.out.println(student.getAge());
Student student = new Student("小明", '男', 19, 1, 90);
Student student1 = new Student("小刚", '男', 19, 2, 88);
Student student2 = new Student("小红", '女', 18, 3, 100);
Student student3 = new Student("小华", '女', 19, 4, 90);
Student student4 = new Student("小强", '男', 20, 5, 85);
student.show();
student1.show();
student2.show();
student3.show();
student4.show();
System.out.println("平均成绩:" + (student.getJava() + student1.getJava() + student2.getJava() + student3.getJava()
+ student4.getJava()) / 5);
// int max = student.getJava(), min = student.getJava();
// //比较student1和student的大小
// if(max<student1.getJava()){
// max=student1.getJava();
// }else if(min>student1.getJava()){
// min=student1.getJava();
// }
// //比较student1和student2的大小
// if(max<student2.getJava()){
// max=student2.getJava();
// }else if(min>student2.getJava()){
// min=student2.getJava();
// }
// //比较student3和student2的大小
// if(max<student3.getJava()){
// max=student3.getJava();
// }else if(min>student3.getJava()){
// min=student3.getJava();
// }
// //比较student3和student4的大小
// if(max<student4.getJava()){
// max=student4.getJava();
// }else if(min>student4.getJava()){
// min=student4.getJava();
// }
//
// System.out.println("最高成绩"+max + "最低成绩" + min);
double a=student.getJava();
double a1=student1.getJava();
double a2=student2.getJava();
double a3=student3.getJava();
double a4=student4.getJava();
System.out.println("最高成绩"+student.MaxJava(a, a1, a2, a3, a4));
System.out.println("最低成绩"+student.MinJava(a, a1, a2, a3, a4));
}
}
例如 继承