提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
目录
文章目录
前言
一、封装
二、继承
三、多态
总结
前言
一、封装
private 将定义方法私有化,需要get/set操作 get是获取值 ,set是设置值
也没有很复杂只是给类或方法上了个锁,最后在用钥匙打开就好了
eg:
//定义一个学生类
package OOP.demo3;
public class Demo3 {
//属性私有化
private String name;
private int id;
private char sex;
//相当于解锁了之前的name
public String getName() {
return name;
}
//设置name
public void setName(String name) {
this.name = name;
}
}
//调用学生类的主方法
package OOP.demo3;
public class Demo {
public static void main(String[] args) {
Demo3 demo3 = new Demo3();
demo3.setName("mxx");
System.out.println( demo3.getName());
}
}
快捷键alt +insert 快速生成get和set方法
二、继承
package OOP.demo4;
import static OOP.demo4.Demo.sss;
//主方法
public class master {
public static void main(String[] args) {
Demo1 demo1 = new Demo1();
Demo demo11 = new Demo();
System.out.println(sss(10,15));
}
}
//父类
package OOP.demo4;
public class Demo {
public void speak(){
System.out.println("口你急哇");
}
public static int sss(int a,int b){
return a +b;
}
}
//子类
package OOP.demo4;
public class Demo1 extends Demo{
}
---------------------------------------------------------------------------
super方法:
//父类
package OOP.demo4;
public class Demo {
protected String name ="mxx";
public void prints(){
System.out.println("human");
}
}
package OOP.demo4;
public class Demo1 extends Demo{
private String name = "mxx1";
public void prints(){
System.out.println("huamnes");
}
public void test1(){
prints();//humanes
this.prints();//humanes
super.prints();//super调用父类的方法 huamn
}
}
package OOP.demo4;
//主方法
public class master {
public static void main(String[] args) {
Demo1 demo1 = new Demo1();
demo1.test("mmmm");
}
}
super
1.调用父类的构造方法,而且必须在第一位的构造方法
2.必须出现在子类或构造方法
3.super和this不能同时调用构造方法
this
1.this是本身调用者的对象 2.super是代表父类对象
1.this在没有继承的情况下也可以使用 2.super必须在继承的情况下使用
1.this调用本类的构造方法,super调用父类的构造方法
=====================================================
方法的重写
注意事项:1.方法名必须相同 2.参数列表必须相同
3.修饰符;范围可以扩大但不能缩小 public>protected>Default>private
4.抛出异常:范围,可以被缩小,但不能扩大;
package OOP.demo4;
//主方法
public class master {
public static void main(String[] args) {
//父类的引用的指向子类
A a = new A();//静态方法只调用和左边有关的“A”,
a.wxw1();
B b =new A();//非静态方法并且子类重写父类的方法,A重写B的方法
b.wxw1();
}
}
package OOP.demo4;
public class B {
public void wxw1(){
System.out.println("wxw1=======<");
}
}
package OOP.demo4;
public class A extends B{
@Override //重写
public void wxw1() {
System.out.println("wxw2=======>");
}
}
三、多态
instanceof
package OOP.demo4;
import OOP.demo.Application;
//主方法
public class master {
public static void main(String[] args) {
//instanceof是一个二元运算符,左边是对象右边类,判断是不是右边类或子类创建的,是的话返回TRUE,否则false
System.out.println(object instanceof B);//true
System.out.println(object instanceof A);//false
System.out.println(object instanceof Object);//true
System.out.println(object instanceof Application);//false
System.out.println("=====================================");
B b = new B();
System.out.println(b instanceof B);//true
System.out.println(b instanceof Object);//true
System.out.println(b instanceof A);//false
//System.out.println(b instanceof Demo );//报错,因为没有两者间关系
}
}
父子级之间存在转换关系
package OOP.demo4;
//主方法
public class master {
public static void main(String[] args) {
*/
//类型之间的转换 父转子,不需要强转,子转父需要转换
B b = new A();
b.go();//go
A C = (A) b;
C.walk();//walk
C.go();//go
}
}
package OOP.demo4;
public class B {
public void go(){
System.out.println("go");
}
}
package OOP.demo4;
public class A extends B{
public void walk() {
System.out.println("walk");
}
}
/*Ctrl + H 查看父子级关系,(要在父类上查看)
--如果子类没有继承父类,会默认继承一个Object的类
总结
Java三大特征有些抽象,需要慢慢结合代码理解



