- 封装
package com. oop. demo03;
public class Student {
private String name;
private int id;
private char sex;
private int age;
public String getName ( ) {
return this . name;
}
public void setName ( String name) {
this . name = name;
}
public int getId ( ) {
return id;
}
public void setId ( int id) {
this . id = id;
}
public char getSex ( ) {
return sex;
}
public void setSex ( char sex) {
this . sex = sex;
}
public int getAge ( ) {
return age;
}
public void setAge ( int age) {
if ( age> 150 || age< 0 ) {
this . age = 1 ;
} else {
this . age = age;
}
}
}
- 继承
继承
public class Person {
public int money = 1000 _000_000;
private int age = 2 ;
public int getAge ( ) {
return age;
}
public void setAge ( int age) {
this . age = age;
}
public void say ( ) {
System. out. println ( "说了一句话" ) ;
}
}
package com. oop. demo04;
public class Teacher extends Person {
}
package com. oop. demo04;
public class Student extends Person {
}
public class Application {
public static void main ( String[ ] args) {
Student student = new Student ( ) ;
student. say ( ) ;
System. out. println ( student. money) ;
}
}
super
super注意点:
1.super调用父类的构造方法,必须在构造方法的第一个
2.super只能出现在子类的方法或者构造方法中
3.super和this不能同时调用构造方法
VS this:
1.代表的对象不同
this :本身调用者这个对象
super:代表父类对象的应用
2.前提不同
this:没有继承也可以使用
super:只能在继承条件下才能使用
3.构造方法不同
this:本类的构造
super:父类的构造
方法重写
public class B {
public void test ( ) {
System. out. println ( "B=>test" ) ;
}
public class A extends B {
@Override
public void test ( ) {
System. out. println ( "A=test" ) ;
}
}
A a = new A ( ) ;
a. test ( ) ;
B b = new A ( ) ;
b. test ( ) ;
}
总结:
重写:需要有继承关系,子类重写父类的方法!
1.方法名和参数列表完全相同
2.修饰符:(从父类到子类)范围可以扩大:public--->protected-->Default-->private
3.抛出的异常:(从父类到子类)范围可以被缩小,不能被扩大:ClassNotFoundException ----> Exception(大)
重写:子类方法和父类必须一致!方法体不同!
为什么需要重写?
1.父类的功能子类不一定需要或者,不一定满足。
快捷键:
//override 重写 alt + Insert
- 多态
public class Person {
public void test ( ) {
System. out. println ( "run" ) ;
}
}
public class Student extends Person {
@Override
public void test ( ) {
System. out. println ( "son run" ) ;
}
public void eat ( ) {
System. out. println ( "eat" ) ;
}
}
public class Application {
public static void main ( String[ ] args) {
Student s1 = new Student ( ) ;
Person s2 = new Student ( ) ;
Object s3 = new Student ( ) ;
s1. test ( ) ;
s2. test ( ) ;
( ( Student) s2) . eat ( ) ;
}
}
多态注意事项:
1.多态是方法的多态,属性没有多态。
2.父类和子类有联系 类型转换异常,ClassCastException
3.存在条件:继承关系,方法需要重写,父类引用指向子类对象:Father f1 = new Son()
不能重写的情况:
1.static方法,属于类,不属于实例
2.final 属于常量;
3.private方法
instanceof
a is instanceof A?
a是A的实例吗
public class Application {
public static void main ( String[ ] args) {
Object object = new Student ( ) ;
System. out. println ( object instanceof Student ) ;
System. out. println ( object instanceof Person ) ;
System. out. println ( object instanceof Object ) ;
System. out. println ( object instanceof Teacher ) ;
System. out. println ( object instanceof String ) ;
System. out. println ( "===============================" ) ;
Person person = new Student ( ) ;
System. out. println ( person instanceof Student ) ;
System. out. println ( person instanceof Person ) ;
System. out. println ( person instanceof Object ) ;
System. out. println ( person instanceof Teacher ) ;
System. out. println ( "===============================" ) ;
Student student = new Student ( ) ;
System. out. println ( student instanceof Student ) ;
System. out. println ( student instanceof Person ) ;
System. out. println ( student instanceof Object ) ;
}
引用类型的类型转换
Student s1 = ( Student) person;
s1. go ( ) ;
( ( Student) person) . go ( ) ;
student. go ( ) ;
Person person1 = student;
抽象的编程思想,持续的学习,茅塞顿开,多实践大脑中的想法!
实践出真知!