面向对象是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。
封装
(把对象属性保护起来,外界不能直接访问,只能通过公共方法)
private可以实现有参封装和无参封装

继承(所有类的父类Object)
Java为单继承,一个类只能有一个直接父类,但可以多级继承,属性和方法逐级叠加

不可继承:
构造方法:类中的构造方法,只负责创建本类对象,不可继承。
private修饰的属性和方法:访问修饰符的一种,仅本类可见。
父子类不在同一个package中时,default修饰的属性和方法:

子类对方法覆盖:
当父类提供的方法无法满足子类需求时,可在子类中定义和父类相同的方法进行覆盖(Override)
方法覆盖原则: 方法名称、参数列表、返回值类型必须与父类相同。 访问修饰符不能比父类更严格。 方法覆盖的执行: 子类覆盖父类方法后,调用时优先执行子类覆盖后的方法。
当子类重写了父类,产生了方法的覆盖,需要super加以区分,才能区别
super对于方法和实例的区分:
方法:
我B类,是继承A类的,A类的a方法,再B里重新写了下成立b,虽然功能更多,但是我忽然发现有些不合适,还是用a,就su
实例:
super去指父类的实例per.a
public static void main(String[] args){
B b=new B();
b. print();
}
}
class A{
int value=10;
}
class B extends A{
int value=20;
public void print(){
int value=30;
System. out. println(value);
System. out. println(this. value);
System. out. println(super. value);
}
}
在对于方法也是:
class A {
public A(){
System. out. println("A()");
}
public A(int value) {
System.out.println("A(int value)");
}
}
class B extends A {
public B(){
super();
System. out. println("B()");
}
public B(int value){
super(value);
system. out. println("B(int value)");
}
}
B继承A
B的无参构造方法,前面会自带一个super()//隐藏
B的有参构造方法,(int a,int b ,int c),(也会带一个隐藏super()无参),我去调用A类中
(int a,int b)就可以做到,省的重写前两个
this和super区别:
this表示当前对象引用,调用本类(包括继承)的属性、方法、本类构造方法
super表示父类对象引用,调用父类的属性、方法、构造方法
会由this()指向的构造方法完成super()的调用。
class A{
public A(){
System.out.println("A-无参构造");
}
public A(int value){
System.out.println("A-有参构造");
}
}
class B extends A{
public B(){
super();
System.out.println("B-无参构造");
}
public B(int value){
this();
//super(5);
System.out.println("B-有参构造");
}
}
public class E{
public static void main(String[] args){
new B(10);
}
}
多态
·场景一:父类形参实现多态,参数的类型更为宽泛。
public void feed(animal a) {
System.out.println("喂食");
a.eat();
}
在这里dog和bird的父类animal中,重写了feed(之前只能指定传进来dog或bird),这样接口就更广泛,只要你是animal的子类,都可以进来
·场景二:父类返回值实现多态,返回不同子类对象。
public animal buy(int type) {
animal a=null;
if(type==1) {
a=new dog();
}
else if(type==2) {
a=new bird();
}
return a;
}
多态的核心概念:
向上转型
animal a=new dog();父类引用中保存真实子类对象,仅可调用Animal中所声明的属性和方法或者dog类中重写的方法。
向下转型(拆箱)
Animal a=new Dog();
Dog b=(Dog)a;
强行转回dog,这样就能调用dog特有的属性和方法
那么向下转型的前提是向上转型,用animal声明的,向下转回去的时候,需要用instanceof来检测,比如dog不能转成cat
if(b instanceof dog ) {
dog c=(dog) b;
c.eat();
}
















