转至:https://zhuanlan.zhihu.com/p/88176396(本人的博客)
面向对象(OOP)的三个特征:
(1)public:对外公开,级别最高。
(2)protect:只对同一个包中的类或子类公开,级别次之。
(3)默认:只对同一个包中的类公开
(4)private:不对外公开,只能在对象内部访问,级别最低。
例子:
class Demo { private String name; private String idnum; private int age; public String getname(){ return name; } public void setname(String name){ this.name=name; } public String getidnum(){ return idnum; } public void setidnum(String idnum){ this.idnum=idnum; } public int getage(){ return age; } public void setage(int age){ this.age=age; } } public class Demo{ public static void main(String[] args) { Demo demo = new Demo(); demo.setage(18); demo.setname("张三"); demo.setidnum("123456"); System.out.println("名字为" + demo.getname() + ",年龄为" + demo.getage() + ",学号为" + demo.getidnum()); } }
public class C extends A{ ... }
1、使用extends关键字。继承允许class继承另一个class的一些通用的fields和methods。多个类存在相同的属性和行为时,定义这么多个类的属性和行为属实有些麻烦,将他们放到单独一个类中就相对比较简洁,只需继承那个定义好属性和行为那个类即可。
2、作用:
3、Java只支持单继承,不允许多继承,即一个子类只能有一个父类,而父类可以有多个子类。
重载(overload)
public class Overloading { public int test(){ System.out.println("test1"); return 1; } public void test(int a){ System.out.println("test2"); } //以下两个参数类型顺序不同 public String test(int a,String s){ System.out.println("test3"); return "returntest3"; } public String test(String s,int a){ System.out.println("test4"); return "returntest4"; } public static void main(String[] args){ Overloading o = new Overloading(); System.out.println(o.test()); o.test(1); System.out.println(o.test(1,"test3")); System.out.println(o.test("test4",1)); } }
重载方法满足的一些条件:
(1)方法名相同。
(2)方法的参数类型、个数、顺序至少有一项不同。
(3)方法的返回值可以不同。
(4)方法的修饰符可以不同。
方法重写/覆盖(override):
class Animal{ public void greeting() { System.out.println("Hi, I am a Animal"); } } class Cat extends Animal { @Override public void greeting() { System.out.println("Mome, I am a Cat"); } } public class Main { public static void main(String args[]) { Animal an = new Animal(); an.greeting(); //Hi, I am a Animal Cat cat = new Cat(); cat.greeting(); //Mome, I am a Cat //顺便看一下runtime 类型的意思 instanceof时提到的 Animal an2 = new Cat(); //虽然an2是个animal,但是被创建的时候是用Cat class,所以调用cat里的方法 an2.greeting();//Mome, I am a Cat } }
覆盖(override)的一些规则:
重载(overload)与覆盖(override)的区别
总结:
定义格式:父类类型 变量名=new 子类类型();
多态成员的特点:
(1)多态成员方法:编译看左边,运行看右边
Fu f1=new Zi(); System.out.println(f1.show()); //f1的门面类型是Fu,但实际类型是Zi,所以调用的是重写后的方法
x instanceof A :检验x是否为类A的对象,返回值为boolean型。
多态案例:
package day0524; public class demo04 { public static void main(String[] args) { People p=new Stu(); p.eat(); //调用特有的方法 Stu s=(Stu)p; s.study(); //((Stu) p).study(); } } class People{ public void eat(){ System.out.println("吃饭"); } } class Stu extends People{ @Override public void eat(){ System.out.println("吃水煮肉片"); } public void study(){ System.out.println("好好学习"); } } class Teachers extends People{ @Override public void eat(){ System.out.println("吃樱桃"); } public void teach(){ System.out.println("认真授课"); }
参考资料:
Java基础(多态的理解与应用)
https://blog.csdn.net/qq_41679818/article/details/90523285
百度百科
Java 封装、继承、多态
原文:https://www.cnblogs.com/hjdk05/p/12594460.html