Java/Android基础-02

Java基础-02 概念


面向对象编程

将某一类事物抽象化,确定如何操作数据然后再考虑如何操作数据。然后再考虑下如何组织数据

  • 特点

    • 属性: 用来描述对象的数据元素称为对象的属性。
    • 方法: 对象的属性进行的操作称为对象的方法。
  • 类是描述对象特征和对象行为,类是对象的模板。

    • 构造器(构造方法)

      • 构造函数将实例变量设置为提供的参数;
    • 方法的重载

      • 调用哪个构造函数取决于参数;
    • 调用另一个构造函数(同类)

      • 使用关键字this
public Employee(double salary) {
    this("", salary);//调用构造函数Emplyee(String, double)
    //后面其他的声明
}
复制代码
  • 方法的参数传递

    • 基本数据类型传递的是该数据的值本身。
    • 引用数据类型传递的是对象的引用而非对象本身。
    • 如果在调用方法中,出现 new 是开辟了新空间。
static 关键字
  • static修饰的方法内部,只能使用static修饰的成员变量(方法和属性)。
  • 非static修饰的方法内部,可以使用static修饰的成员变量。
  • 在static方法内,不能直接使用非static方法。
  • 在static方法内,可以使用static方法。
  • static是修饰符,不能声明构造器 。
  • static的类调用。
修饰符
  • private:

    • 只能在本类中使用,在其他类中使用是 通过 get set方法。
  • protected:

    • 可以再本类中使用,也可以在本包中使用.
    • 在继承时,子类无论在哪个包中,都都可以使用。
    • 如果不是 继承,在其他类中即使导入包也不能使用。
  • public : 通用;

  • default: 表示一种不加任何修饰符的状态。

重写
  • 重写方法必须和父类中的被重写的方法具有相同的/方法名称/输入参数/返回值类型。
  • 不能使用比父类中更严格的 访问权限。
  • 重写方法不能比父类重写方法抛出 更多异常。(指范围);
super关键字
  • 访问父类的成员变量:super.变量

  • 访问父类中的方法;super.方法

  • 访问父类的构造器;super(参数列表)

  • super 具体使用

    • 一定要写在子类构造器中.
    • 如果调用父类无参构造器,可以省略,即系统默认;
this关键字
  • 在类本身的方法或构造器中引用该类的实例变量和方法。
  • 将当前对象作为参数传递给其它方法或构造器。
  • 用来调用其他的重载的构造器(必须写在第一行)。
static 初始化块:
  • 最先被执行
抽象类
  • 如果在一个类中,至少有一个抽象方法,那么该类必须定义为抽象类。

  • 如果一个类中,没有抽象方法,那么该类可以是 抽象类;

  • 抽象方法 ,只需要声明,不用实现;

  • 抽象类可以定义构造器、和 普通方法。

  • 构造方法:static方法、private方法和final方法不能被定义成抽象方法。

  • 抽象类中不能实例化!

  • 子类必须实现 抽象父类的 方法!

    • 例外: 子类也是抽象类则不需要全部实现;
接口
  • 接口中声明属性,必须要赋初始值。(public static final)
  • 接口中的方法默认为抽象方法,默认使用 public abstract 来修饰。
  • 在接口中,声明方法的时候,不能够使用static ,final ,private protected 来修饰;
  • 多个无关类可以实现同一个接口。
  • 一个类可以实现 多个接口。
  • 一个接口 可以 继承多个接口;
  • 如果想要不去实现那些方法,就定义成abstract抽象类。
多态
  • 上转型:父类 对象1 =new 子类; (就是父类) 限制(只能使用父类);

  • 下转型: 子类 对象 =(子类)父类的对象 不限制

  • 分类:

    • 编译时多态:静态多态,由方法重载来体现。
    • 运行时多态:动态多态,由向上转型来实现。
		   例如:public interface Man(){
			void eat();
			void sleep();
		   }
			public class SuperMan implements Man{
				public void eat(){                    //实现的方法;
					System.out.println(">>吃饭");
				}
				public void sleep(){
					System.out.println(">>睡觉");
				}
			}

			public class Test{
				public static void main(String[] args){
					Man men=new SuperMan();  //  接口实现 多态;
					/*这样写的目的就实现了,让接口来实现自己定义的 抽象方法;
					*  但是它不能实现  子类的方法;
					*/
					men.eat();
					men.sleep();
				}
			}
复制代码
内部类
  • 成员内部类

    • 成员内部类也叫实例内部类, 但里面不能定义static变量。
    • 成员内部类持有外部类的引用。
		模板:
			class OutClass{             //外部类
				int x=1;
				class InnerClass{   //内部类
					private void print(){  // 内部类中定义的方法;
						System.out.println("内部类实例化");
					}
				}
				public static void main(String[] args){
					//需求:用内部类中的方法
					MemberClass.InnerClass ic=new MemberClass().new InnerClass();
					id.print();
					//外部类.内部类  对象=new 外部类().new 内部类();
				}
			}
复制代码
  • 静态内部类
		public static class InnerClass{}   //静态内部类的格式;
		//需求 用 静态内部类中的方法;
		StaticMember.InnerClass si=new StaticMember.InnerClass();
		//  外部类.内部类  对象=new 外部类.内部类();
复制代码
  • 局部内部类
		此类定义在方法中,
		void method(final int temp){  // 此处的参数要用 final 修饰,保证 参数的稳定性;
			class InnerClass{                 //内部类;
				public void print(){
					System.out.println("  ok");
				}
			}
		}
复制代码
  • 匿名内部类
		//条件
		   如果一个内部类在整个操作中 只使用一次 的话,就可以定义为匿名内部类。
		   没有名字的内部类,就是java为了方便我们编写程序设计的一个机制,因为有时候
		   有的内部类只需要创建一个它的对象就可以,以后再不会用到这个类。
		//形式
		   匿名类内部不用声明类名称,而是用new直接产生一个对象。匿名内部类是在抽象类
		   和接口的基础上发展起来的。它可以是 ①继承某个类  或②实现某个接口。

	例子:
		class interface A{
			void eat();
		}
		
		class AA implements A{
			 void eat(){ // 重写的方法 
				System.out.println(">>>>>>>>");
			 }
		}
		class InnerClass{
			public static void main(String args[]){
			/*这样就不用再 声明一个对象,可以直接
			*用继承的 类  或 实现的 接口
			*/
				new A(){                            // 利用接口(父亲)
					void eat(){                 //实现了 重写方法;
						System.out.println(”¥¥¥¥¥¥¥¥¥¥“);
					}
				}.eat();
			}
	}
复制代码
异常 throw / throws
  • 位置:throw 是放在方法 中,throws 在方法声明处;
  • 后面的值:throw是对象,throws后面为异常类。
  • 作用:throw是在方法中抛出一个异常,throws是声明的方法内将代码的异常抛出,不会划红线、
  • 使用:throw时,需要配合throws或try/catch.
  • 调用:调用throws方法时,需要处理异常。(位置、后面值、作用、使用)
抽象类和接口的异同点:
  • 相同点:

    • 都是不断向上抽取而来。
  • 不同点

    • 抽象类需要被继承,而且只能单继承.(接口需要被实现,而且可以多实现。)
    • 抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法 接口中只能定义抽象方法,必须由子类去实现。
    • 抽象类的继承,是 is a关系,在定义该体系的基本共性内容。

转载于:https://juejin.im/post/5b002f676fb9a07aab2a1f2a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值